HDU 1002
大水题
为了心情好点去写的
结果
思路很明确
过程有点曲折
超大数字的计算用字符串来解决
换成减法也许会难点
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 int main() 6 { 7 int T; 8 cin>>T; 9 int t =T; 10 11 while(T--) 12 { 13 string a,b,c,d; 14 cin>>a>>b; 15 16 c = a;//之后要输出a,b 17 d = b;//先备份 18 int la = a.length(); 19 int lb = b.length(); 20 21 if(la<lb)//简化问题把长短区分开来 22 { 23 string c = a; 24 a = b; 25 b = c; 26 la = a.length(); 27 lb = b.length(); 28 } 29 30 char* result = new char[la+1]; 31 result[0]= '0'; 32 int dif = la-lb; 33 int index = la; 34 int add = 0; 35 for(int i = lb-1;i>-1;i--)//一直短的那些每位相加 36 { 37 if(b.at(i)+a.at(dif+i)+add<='0'+'9') 38 { 39 result[index] = b.at(i)+a.at(dif+i)-'0' +add; 40 index--; 41 add = 0; 42 }else 43 { 44 result[index] = b.at(i)+a.at(dif+i)-'0'-10 +add; 45 index--; 46 add = 1; 47 } 48 } 49 if(la==lb)//等长时的考虑 50 { 51 if(a.at(0)+b.at(0)>'0'+'9') 52 { 53 result[0]='1'; 54 } 55 }else{ 56 for(int i = dif-1;i>-1;i--) 57 { 58 if(a.at(i)+add<='9') 59 { 60 result[index] = a.at(i)+add; 61 index--; 62 add =0; 63 }else 64 { 65 result[index] = a.at(i)+add-10; 66 index--; 67 add = 1; 68 } 69 } 70 } 71 cout<<"Case "<<t-T<<":"<<endl; 72 cout<<c<<" "<<"+"<<" "<<d<<" = "; 73 74 if(result[0]!='0') 75 { 76 cout<<result[0]; 77 } 78 for(int i =1;i<=la;i++) 79 { 80 cout<<result[i]; 81 } 82 cout<<endl; 83 if(T!=0) 84 { 85 cout<<endl; 86 } 87 } 88 89 }