- 题目链接
#include<stdio.h> #include<string.h> char a[1005]; char b[1005]; int x[1005]; int y[1005]; int sum[1010]; int main() { int T; scanf("%d",&T); for(int I=1;I<=T;I++) { memset(a,0,sizeof(char)*1005); //将数组清零 memset(b,0,sizeof(char)*1005); memset(x,0,sizeof(int)*1005); memset(y,0,sizeof(int)*1005); memset(sum,0,sizeof(int)*1010); scanf ("%s %s",a,b); int p = strlen(a); int q = strlen(b); int u = 1; int v = 1; int w = 1; for(int i=p-1;i>=0;i--) //将每个数字倒序输入整形数组 { x[u++] = a[i] - '0'; //将字符变为数字 } for(int i=q-1;i>=0;i--) //将每个数字倒序输入整形数组 { y[v++] = b[i] - '0'; //将字符变为数字 } u = u - 1; //记录数字的位数 v = v - 1; // printf("%d %d\n",u,v); if(u >= v) //进行模拟加法 { for(int i=1;i<=u;i++) { int e = x[i] + y[i] + sum[w]; if(e<10) sum[w++] = e; else { sum[w] = e-10; w++; sum[w] = sum[w] + 1; } } } else { for(int i=1;i<=v;i++) { int e = x[i] + y[i] + sum[w]; if(e<10) sum[w++] = e; else { sum[w] = e-10; w++; sum[w] = sum[w] + 1; } } } printf("Case %d:\n",I); //按要求进行格式化输出 for(int i=u;i>=1;i--) { printf("%d",x[i]); } printf(" + "); for(int i=v;i>=1;i--) { printf("%d",y[i]); } printf(" = "); if(sum[w] != 0) printf("%d",sum[w]); for(int i=w-1;i>=1;i--) { printf("%d",sum[i]); } printf("\n"); //不可省略,否则造成PE错误 if(I != T) printf("\n"); //依照题目要求,在两个输出行之间有个空行。 //而不是每个输出行之后有一个空行, //所以最后一组结果输出后不必再输出空行。 } return 0; }
HDU-1002(模拟加法运算(超大数))
最新推荐文章于 2021-05-17 15:01:08 发布