Description
Input
Output
Sample Input
2 1 2 112233445566778899 998877665544332211
Sample Output
Case 1: 1 + 2 = 3 Case 2: 112233445566778899 + 998877665544332211 = 1111111111111111110
题目大意:
大整数相加。
解题思路:
先把短的补齐。从最后一位開始计算。不进为就直接放进容器,进为把取余的放进容器,然后前一位加一。
代码:
#include<iostream>
#include<string>
#include<cstdio>
#include<vector>
using namespace std;
int t;
string str1,str2;
vector <char> v;
void solve(){
string temp;
int a,l2;
if(str1.length()<str2.length()){
temp=str1;str1=str2;str2=temp;
l2=str2.length();
}
for(int i=0;i<str1.length()-l2;i++){
str2.insert(0,1,'0');
}
for(int i=0;i<str1.length();i++){
a=str1[str1.length()-i-1]+str2[str2.length()-i-1]-2*'0';
if(a>=10){
v.push_back(a%10+'0');
if(str1.length()-i-1==0){
v.push_back('1');break;
}
str1[str1.length()-i-2]=(char)(str1[str1.length()-i-2]+1);
}
else v.push_back((char)(a+'0'));
}
vector<char>::iterator it=v.end();
it--;
while(it!=v.begin()){
if(*it=='0')
v.erase(it);
else break;
it--;
}
for(int i=v.size()-1;i>=0;i--){
cout<<v[i];
}
cout<<endl;
}
int main(){
int casen=0;
scanf("%d",&t);
while(t-->0){
cin>>str1>>str2;
printf("Case %d:\n%s + %s = ",++casen,str1.c_str(),str2.c_str());
v.clear();
solve();
if(t!=0)
cout<<endl;
}
return 0;
}
HDU 1002 A + B Problem II(大整数相加)
原文:http://www.cnblogs.com/yxwkf/p/5203736.html