大数加法
http://poj.org/problem?id=1503
题意:
给定不超过100个不超过100位的正整数,求和,以零结束
输入:
每行输入一个数,以零结束
输出:
输出所有数的和
输入样例:
123456789012345678901234567890 123456789012345678901234567890 123456789012345678901234567890 0
输出样例:
370370367037037036703703703670
分析:
这是大数的加法问题,我们可以用字符输入输出,把字符转换数计算。
代码:
#include<iostream>
using namespace std;
string a,b;
void sum(string &a,string b ) //注意a是双向传递
{ int i,j,k,c,s;
while (a.length()-1>b.length()-1) b='0'+b; //字符短的加前导零,使他们一样长
while (b.length()-1>a.length()-1) a='0'+a; //字符短的加前导零,使他们一样长
c=0;
for (i=a.length()-1; i>=0; i--)
{ s=a[i]-48+b[i]-48+c;
if ( s>9 ) { s=s%10; c=1;} else c=0;
a[i]=48+s;
}
if ( c>0 ) a='1'+a; //进位加一
}
int main()
{
cin>>a;
while( cin>>b)
{
if(b[0]=='0'&&b.length()==1) break;
sum(a,b);
}
cout<<a<<endl;
}