}內容 :
輸入檔案包含 N 行數字,每個數字皆為非負整數,且位數小於 100 位。
}輸入說明 :
每讀取兩個數字後印出加法後的結果
}範例輸入 :
123456789
01
5566
7788
3141592653589793
2718281828459045
}範例輸出 :
123456790
13354
5859874482048838
#Code
#include <stdio.h>
#include <string.h>
void reverse(char * n, int len)
{
int i, temp;
for (i = 0; i < len/2; i++)
{
temp = n[i];
n[i] = n[len-i-1];
n[len-i-1] = temp;
}
}
int main(void)
{
char n1[100], n2[100], rs[101], carry;
int i, len1, len2, temp, len;
while (scanf("%s %s",n1, n2) == 2)
{
len1 = strlen(n1);
len2 = strlen(n2);
reverse(n1, len1);
reverse(n2, len2);
for (i = len1; i < 100; i++)
n1[i] = '0';
for (i = len2; i < 100; i++)
n2[i] = '0';
for (i = 0; i < 101; i++)
rs[i] = '0';
carry = 0;
for (i = 0; i < 100; i++)
{
temp = (n1[i] - '0') + (n2[i] - '0') + carry;
rs[i] += temp % 10;
carry = temp / 10;
}
if (carry > 0)
rs[100] += carry;
while (i >= 0 && rs[i] == '0')
i--;
if (i == -1)
printf("0");
else
for (; i >= 0; i--)
putchar(rs[i]);
printf("\n");
}
return 0;
}
沒有留言:
張貼留言