#include <stdio.h> #include <string.h> /* 高精度大数相加,未判断输入负数情况 位数(1000以内) */ int main() { char a[1000],b[1000]; int c[1002]={0}; int n[1000]={0},m[1000]={0};//这三个数组必须初始化为0; int p=0; int i,j,k=0; scanf ("%s%s",a,b); if (a[0]=='0'&&b[0]=='0') {printf ("0"); //判断输入为0时 return 0;} else { int x=strlen(a),y=strlen(b);//计算输入的数字长度 for (i=0,j=x-1;i<x;i++,j--) n[i]=a[j]-'0'; for (i=0,j=y-1;i<y;i++,j--) m[i]=b[j]-'0';//逆序排序 k=x>y?x:y; //判断输入的那个位数长 for (i=0;i<=k;i++)//进位处理 ,相比于i<=2000,优化效率 { c[i]+=n[i]+m[i]; if (c[i]>=10) { c[i+1]++; c[i]%=10; } } for (j =1001;; j--) //去除未用到的位,即去 0 if (c[j] != 0) { p=j; break; } for (i = p; i >= 0; i--) printf("%d", c[i]);//逆序输出 printf("\n"); return 0; } }