HDU1002 大数相加

 1 #include <iostream>

 2 #include <iostream>

 3 #include <iomanip>

 4 #include<string>

 5 #include<cstring>

 6 using namespace std;

 7 

 8 string A , B;

 9 char a[1010];

10 char b[1010];

11 char result[1010];

12 

13 int max(int a,int b)

14 {

15     return a>b?a:b;

16 }

17 int main()

18 {

19     int T;

20     cin>>T;

21     for(int j=1;j<=T;j++)

22     {

23         memset(a,'0',sizeof(a));

24         memset(b,'0',sizeof(a));

25         memset(result,'0',sizeof(a));

26         cin>>A>>B;

27         int len1=A.size(),len2=B.size();

28         int m=len1,n=len2;

29         for(int i=0;i<m;i++)

30         {

31             a[i]=A.at(len1-1);

32             len1--;

33         }

34         for(int i=0;i<n;i++)

35         {

36             b[i]=B.at(len2-1);

37             len2--;

38         }

39         int k=max(m,n);

40 

41 

42         int t=0;//用于向前进位;

43         for(int i=0;i<=k;i++){

44             if((a[i]-'0')+(b[i]-'0')+t>=10) result[i]=(char)((a[i]-'0')+(b[i]-'0')+t-10+'0'),t=1;

45             else  result[i]=(char)((a[i]-'0')+(b[i]-'0')+t+'0'),t=0;

46         }

47 

48         cout<<"Case "<<j<<":"<<endl;

49         cout<<A<<" + "<<B<<" = ";

50         if(result[k]=='0'){

51             for(int i=k-1;i>=0;i--) cout<<result[i];

52         }

53         else{

54             for(int i=k;i>=0;i--) cout<<result[i];

55         }

56         cout<<endl;

57         if(j!=T) cout<<endl;

58 

59     }

60     return 0;

61 }

 

由于数字位数可达1000之多,即使long long也没法计算,那么只能用数组来进行存储,不断进位来解决问题。

你可能感兴趣的:(HDU)