-
题目描述:
-
One of the first users of BIT's new supercomputer was Chip Diller.
He extended his exploration of powers of 3 to go from 0 to 333 and he explored taking various sums of those numbers.
"This supercomputer is great,'' remarked Chip.
"I only wish Timothy were here to see these results.''
(Chip moved to a new apartment, once one became available on the third floor of the Lemon Sky apartments on Third Street.)
-
输入:
-
The input will consist of at most 100 lines of text, each of which contains a single VeryLongInteger. Each VeryLongInteger will be 100 or fewer characters in length, and will only contain digits (no VeryLongInteger will be negative).
The final input line will contain a single zero on a line by itself.
-
输出:
-
Your program should output the sum of the VeryLongIntegers given in the input.
-
样例输入:
-
123456789012345678901234567890 123456789012345678901234567890 123456789012345678901234567890 0
-
样例输出:
-
370370367037037036703703703670
-
提示:
-
注意输入数据中,VeryLongInteger 可能有前导0
-
-
又一个大数水题
-
-
#include <stdio.h> #include <string.h> struct bigInt { int digit[200]; int size; }; void init(bigInt &a) { for(int i = 0; i < 200; i++) a.digit[i] = 0; a.size = 0; } bigInt convert(char buf[]) { bigInt ret; init(ret); for(int i = strlen(buf)-1; i >= 0; i--) ret.digit[ret.size++] = buf[i] - '0'; return ret; } bigInt add(bigInt a, bigInt b) { bigInt ret; init(ret); int bound = a.size > b.size ? a.size : b.size; int carry = 0; for(int i = 0; i < bound; i++) { int tmp = a.digit[i] + b.digit[i] + carry; ret.digit[ret.size++] = tmp % 10; carry = tmp / 10; } if(carry != 0) ret.digit[ret.size++] = carry; return ret; } int main() { //freopen("Test.txt","r",stdin); char buf[110]; bigInt sum; init(sum); while(gets(buf)) { //printf("%s\n",buf); if(strcmp(buf,"0") == 0) { while(sum.digit[sum.size-1] == 0) sum.size--; for(int i = sum.size-1; i >= 0; i--) printf("%d",sum.digit[i]); printf("\n"); } else { sum = add(sum,convert(buf)); } } return 0; }