题意: 给出两个长整型A,B,要求计算A+B的值。
输入要求:有n组数据输入。
思路: 大数处理,对A,B逆序处理,使其对位且从低位开始运算;设立变量保存进位情况;求得结果后再逆序使得结果顺序为高位至低位。
代码:
/**
HDOJ 大整数的加法
*/
#include <bits/stdc++.h>
using namespace std;
const int maxn = 63355;
/**长整形加*/
string addBigNum(string a,string b){
reverse(a.begin(),a.end()); //逆序处理从低位开始加
reverse(b.begin(),b.end());
int radix = 0,i = 0;
string s = "";
for(i = 0;i<a.length()&&i<b.length();i++){
int k = (a[i]-'0'+b[i]-'0'+radix)%10; //位置数
radix = (a[i]-'0'+b[i]-'0'+radix)/10; //进位数
s+=(k+'0');
}
if(i<a.length()){ //a字符长
while(i<a.length()){
int k = (a[i]-'0'+radix)%10; //位置数
radix = (a[i]-'0'+radix)/10; //进位
s+=(k+'0');
i++;
}
}
if(i<b.length()){ //b字符长
while(i<b.length()){
int k = (b[i]-'0'+radix)%10; //位置数
radix = (b[i]-'0'+radix)/10; //进位
s+=(k+'0');
i++;
}
}
if(radix) s+=(radix+'0'); //最后进位
return s;
}
int main(){
int n,index = 1;
cin>>n;
while(index<=n){
string a,b;
cin>>a>>b;
string s = addBigNum(a,b);
reverse(s.begin(),s.end()); //逆序恢复高->低位顺序
cout<<"Case "<<index<<":"<<endl;
cout<<a<<" + "<<b<<" = "<<s<<endl;
if(index<n) cout<<endl;
index++;
}
return 0;
}