-
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
-
题目描述:
-
输入:
-
输出:
-
样例输入:
-
样例输出:
题目意思是实现多个大整数相加。一直认为九度OJ上的题目出的意思都不是很明确,或者说不严谨。
我刚开始以为几个整数因为存在前导0,所以长度都一样,后来发现理解错了。这里的长度是可以不一样的。
我的思路是,每次输入一个str,就把它加到result中,最后输出result的值。输出的时候要把前导0去掉。还有如果两个00相加,结果是0,要把这时的0输出出来。
还有一点要注意,在每次把str加到result中时,最高位如果大于9,要把它进到高位去,以防出现溢出。
#include <iostream>
#include <cstring>
using namespace std;
int result[101];
void add(string str){ //实现将str加到result中
int len = str.length();
int i = 0;
for(i=0;i<len;i++){
int temp = result[100-i] + str[len-1-i] - '0';
result[100-i] = temp % 10;
result[100-i-1] += temp / 10;
}
while(result[100-i] > 9){ //将最高位的多位数化为个位数,
int temp = result[100-i];
result[100-i] = temp % 10;
result[100-i-1] += temp / 10;
i++;
}
}
int main(){
string str;
memset(result,0,sizeof(result));
while(cin>>str){
if(str == "0")
break;
else{
add(str);
}
}
bool flag = true;
int count = 0;
for(int i=0;i<101;i++){
if(result[i] == 0 && flag){ //把前导0去掉
count ++;
continue;
}
else{
flag = false;
cout<<result[i];
}
}
if(count == 101)
cout<<0<<endl; //表示0和0相加
cout<<endl;
return 0;
}