大数加法
作为一名划水与各种领域的全不能型玩家,终于来到了C语言开始划水,为保持“划水”精神,磕磕盼盼的终于完整的写完一个“大数”类型的题目:
输入数据的第一行为一个整数T(1≤T≤20),表示测试数据总数,紧接着的T行数据,每行包含由空格隔开的两个整数a和b,每组数据占一行。注意了,a和b可能非常大,大到超过32位整数可以表示的范围,我们假定a和b的位数不超过1000。
Output对于每组数据,你需要输出两行,第一行显示"Case #:"(注意输出为英文字符),第二行为一个等式"a + b = Sum",这里的Sum就是指a + b的结果(注意这个等式中的空格)。请在每两组输出数据间输出一个空行。
Sample Input
2 1 2 112233445566778899 998877665544332211
#include<stdio.h> #include<string.h> int main() { int n; scanf("%d",&n); for(int m=1;m<=n;m++){ printf("Case %d:\n",m); char st1[1001],st2[1001];//大数嘛,自然可能很多位,那就用字符串存 int st3[1001]={0},st4[1001]={0},len1,len2,a,b,max; scanf("%s %s",&st1,&st2); printf("%s + %s = ",st1,st2); len1=strlen(st1); len2=strlen(st2);\\计算读入字符串长度 if(len1>len2){ max=len1; }else{ max=len2; }\\判断最多位,为最后输出做准备 for(a=len1-1,b=0;a>=0;a--){ st3[b++]=st1[a]-'0';\\将字符串的每一个字符转变为具体的数并存入数组 } for(a=len2-1,b=0;a>=0;a--){ st4[b++]=st2[a]-'0';\\同上 } for(a=0;a<1001;a++){ st3[a]+=st4[a]; if(st3[a]>9){ st3[a]=st3[a]-10; st3[a+1]++; } }\\数组相加 for(a=max;a>=0;a--){ if(st3[max]==0){ st3[max]=1; continue; }\\判断最高位的位置 if(a==0&&m!=n){ printf("%d\n\n",st3[a]); }else if(a!=0){ printf("%d",st3[a]); }else if(a==0&&m==n){ printf("%d\n",st3[a]); } } } return 0; }
Sample Output
Case 1: 1 + 2 = 3 Case 2: 112233445566778899 + 998877665544332211 = 1111111111111111110
划水嘛,自然就要慢慢划,作为初学者,也就几个小时,相加搞完,应该减乘除应该也能慢慢划出来了吧?!