OpenJudge 2981 大整数加法 C++

链接地址: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 }

 

你可能感兴趣的:(open)