链接地址:http://bailian.openjudge.cn/practice/2981
题目:
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
求两个不超过200位的非负整数的和。
- 输入
- 有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
- 输出
- 一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
- 样例输入
22222222222222222222 33333333333333333333- 样例输出
55555555555555555555- 来源
- 程序设计实习2007
思路:
大整数加法,套模板即可
代码:
1 #include <iostream> 2 #include <cstdio> 3 #include <string> 4 using namespace std; 5 6 7 string sum(string s1,string s2) 8 { 9 if(s1.length()<s2.length()) 10 { 11 string temp=s1; 12 s1=s2; 13 s2=temp; 14 } 15 int i,j; 16 for(i=s1.length()-1,j=s2.length()-1;i>=0;i--,j--) 17 { 18 s1[i]=char(s1[i]+(j>=0?s2[j]-‘0‘:0)); //注意细节 19 if(s1[i]-‘0‘>=10) 20 { 21 s1[i]=char((s1[i]-‘0‘)%10+‘0‘); 22 if(i) s1[i-1]++; 23 else s1=‘1‘+s1; 24 } 25 } 26 return s1; 27 } 28 29 int main() 30 { 31 string str1,str2; 32 cin>>str1>>str2; 33 cout<<sum(str1,str2)<<endl; 34 return 0; 35 }