C语言实现大数加法(正整数)

杭电OJ1002
输入:输入的第一行包含一个整数T(1<=T<=20),表示测试用例的数量。接下来是T行,每行由两个正整数A和B组成。注意,整数非常大,这意味着您不应该使用32位整数来处理它们。您可以假设每个整数的长度不超过1000。
输出:对于每个测试用例,您应该输出两行。第一行是“Case”,表示测试用例的编号。第二行是方程“A+B=Sum”,Sum表示A+B的结果。注意方程中有一些空格。在两个测试用例之间输出一个空行。

我拿很多种数进行了测试,在VS上都没问题。但是提交就是WRONG..wrong了一天了。下面是代码,各位前辈帮帮忙,给看看。

#include<stdio.h>
#include<string.h>
#define MAX(a,b) a>b?a:b
int main() {
    int n = 0,i,j,num=0,lengh,lengh_a1,lengh_a2,flag;
    char a1[1002], a2[1002];//字符数组存大数
    scanf("%d", &n);
    for (j = 0; j < n; j++) {
        scanf("%s%s", &a1, &a2);
        lengh_a1 = strlen(a1);//读输入到两个字符数组中的元素个数,用于转换成整形数组
        lengh_a2 = strlen(a2);
        int c1[1002] = { 0 }, c2[1002] = { 0 }, c3[1003] = { 0 };//定义在循环内部,每次都会初始化一次(在外面好像也没遇到错误)
        for (i = 0; i < lengh_a1; i++) {
            c1[i] = a1[lengh_a1 - i - 1]-48;//倒着把字符数组的元素输入到整形数组中
        }
        for (i = 0; i < lengh_a2; i++) {
            c2[i] = a2[lengh_a2 - i - 1]-48;
        }
        lengh = MAX(lengh_a1, lengh_a2);//两数组最长的长度
        for (i = 0; i <lengh; i++) {
            flag = 0;//用来看最后一次循环是否进位,在输出的时候用到了
            c3[i] = c1[i] + c2[i]+ num;//如果进位,加num
            num = 0;
            if (c3[i] >= 10) {
                c3[i + 1] = 1;//进位,因为这层循环到c3[lengh-1]为止,这样写使c3[lengh]可以获得到进位。
                num = 1;
                c3[i] -= 10;
                flag = 1;
            }
        }
        num = 0;//防止上一组数的进位Num影响到下一组数
        printf("case%d:\n",j+1);//输出
        printf("%s + %s = ", a1, a2);
        for (i = lengh + flag -1; i >= 0; i--)
            printf("%d", c3[i]);
        if (j + 1 != n) printf("\n\n");
        else printf("\n");
    }
    return 0;
}

2个回答

是不是输出格式不对,Case首字母大写?

chenxizhan1995
chenxizhan1995 能帮到你就好~
3 个月之前 回复
qq_40920768
Stukang 哇,谢谢你。把字母大小写一改就从wrong变成Presentation Error了...调了一下格式就AC了
3 个月之前 回复
每个整数的长度不超过1000
x20,需要多2位
再加上\0
你试试看1003
qq_40920768
Stukang 谢谢您的建议,刚刚我去试了下,修改数组的长度后结果没有什么变化。
3 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问

相似问题

2
出一道只用到C基础的题目,好像用到大数计算
3
关于C#的大数乘法问题
0
一个大数的四则运算的问题,求出指数的运算结果,采用C语言程序的解决
1
C语言的函数算法去解决一个矩阵的问题,涉及到大数的计算怎么实现的?
1
计算最大公约数,大数分解求解的问题怎么采用C语言怎么来实现
0
序列和大数的计算的问题,如何运用C语言计算的呢,具体的思路
3
关于c++大数的long long类型的中间计算问题,求大佬解,谢谢!!
0
数学上的一个大数计算的问题的算法构成,采用C语言的程序的设计的办法怎么做
0
大数定理在数据结构上的实践运用,怎么利用C语言的程序的实现的方式是怎么?
0
计算大数的位数的一个算法的问题,如何才能正确地利用C 语言的程序的编写的手段来实现的?
0
大数的判断的算法问题,怎么采用C语言的程序编写设计的思想去正确地实现的
0
精确计算大数的问题,怎么使用C语言的程序编写的过程步骤实现,具体代码编写实现的思想
0
计算斐波拉契数列的区间和的问题,要求计算大数的方式实现怎么用的C语言的程序编写代码的形式的思路
0
“第M大数”是指从小到大的第M大,具体怎么计算采用的是C语言的程序的编写的技术的办法
2
自己写的大数减法,帮忙看看怎么样
1
C++调用MATLAB .m文件编译生成的dll,提示未定义函数或变量'sym'
3
怎么把一个form表单里的input框分类,做到转换为json格式时可以形成一个大数组?
1
【算法题】想要算2的68次方-1分解质因数,写到一半后面的卡住了
3
如何实现1^1+2^2+……20^20?
0
Big Number 大数的计算算法