/*在C中不同Java中有BigInteger类,可以计算很大的数,所以为了解决这个问题我们可以模拟手算,一位一位的相加:*/ #include<stdio.h> #include<string.h> void main() { char a[1024]={0},b[1024]={0}; int c[1026]={0};//保存结果的数组 gets(a); gets(b); int len1 = strlen(a); int len2 = strlen(b); int min = len1<len2?len1:len2; int max = len1<len2?len2:len1; int temp = 0;//进位的位数 int j=0;//c的数组下标 for(int i=max-1;i>=0;i--)//首先从长度较长的最后一位(也就是个位数)相加 { int num1,num2; if(len1>len2) { if(i-len1+len2>=0) { num1 = a[i]-'0';//减去'0',得到Int值,后面类似 num2 = b[i-len1+len2]-'0';//取得较短的字符的最后一位(也就是个位数) } else//当较短的字符串取完了,就可以将num2直接赋值为0了 { num1 = a[i]-'0'; num2 = 0; } } else { if(i-len2+len1>=0) { num1 = b[i]-'0'; num2 = a[i-len2+len1]-'0'; } else { num1 = b[i]-'0'; num2 = 0; } } int sum = num1 + num2 +temp; c[j++] = sum%10; temp = sum/10; } c[j] = temp;//最后注意可能有进位的情况,所以需要再进一位 int start = 0; for(int k=1026-1;k>=0;k--) { if(c[k]>0) { start = k;//得到数组从那一位开始存了数字 break; } } for(int m=start;m>=0;m--)//开始打印 { printf("%d",c[m]); } printf("\n"); }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。