Input:
每一行输入一个大整数,最多200位长度, 输入的最后一行是一个0, 表示输入的结束。
- 123456789012345678901234567890
- 123456789012345678901234567890
- 123456789012345678901234567890
- 0
Output:
输出输入的所有的数的和。
- 370370367037037036703703703670
下面是用字符数组实现的:
- #include <stdio.h>
-
#include <stdlib.h>
-
#include <string.h>
/**
计算两个大整数的和,输入:a和b分别使用字符串表示的两个大整数,输出:c是a和b的和
*/
-
void sum(char *a, char *b, char *c) {
-
int i, j, k;
-
int len1 = strlen(a);
-
int len2 = strlen(b);
-
k = (len1 > len2) ? len1: len2;
-
memset(c, '0', k);
-
c[k+1] = '\0';
-
int carry = 0, temp;
-
for(i=len1-1, j=len2-1; i>=0 || j>=0; i--, j--, k--)
-
{
-
temp = carry;
-
if(i>=0) temp += a[i] - '0';
-
if(j>=0) temp += b[j] - '0';
-
-
if (temp >= 10) {
-
c[k] = temp - 10 + '0';
-
carry = 1;
-
} else {
-
c[k] = temp + '0';
-
carry = 0;
-
}
-
}
-
c[k] = carry + '0';
-
}
-
-
int main()
-
{
-
char a[200], b[200], c[200], *p;
-
scanf("%s",a);
-
while(true) {
-
scanf("%s", b);
-
if(strcmp(b, "0") == 0) break;
-
sum(a, b, c);
-
p = c;
-
if(*p == '0') p++;
-
strcpy(a, p);
-
}
-
-
printf("The result is: %s \n", a);
- system("pause");
- return 0;
- }