- #include <vector>
- #include <iostream>
- #include <set>
- #include <string>
- #include <algorithm>
- #include <iomanip>
- #include <iterator>
- #include <strstream>
- using namespace std;
- //求某一位全加和;x,y为加数;b为低位进位,sum为和,a表示向高位进位
- void add(const char &x,const char &y,int b,char &sum,int &a ){
- if(x>'9'&&y>'9'){
- sum=x+y-87*2+b;
- a=1;
- sum-=20;
- if(sum>9)sum+=87;
- else sum+=48;
- }
- else if(x<='9'&&y<='9'){
- sum=x+y-48*2+b;
- a=0;
- if(sum>9)sum+=87;
- else sum+=48;
- }
- else{
- sum=x+y-48-87+b;
- if(sum<10){
- a=0;
- sum+=48;
- }
- else if(sum>19){
- a=1;
- sum-=20;
- if(sum>9)sum+=87;
- else sum+=48;
- }
- else{
- a=0;
- sum+=87;
- }
- }
- }
- void out(string &str){
- for(string::reverse_iterator it=str.rbegin();it!=str.rend();it++){
- cout<<*it;
- }
- cout<<endl;
- }
- int main(){
- string num1,num2;
- char sum;
- int a=0;
- int longer;//num1和num2中的长者
- int i;//num1,num2中短者的长度
- int L1,L2;//num1,num2的长度
- while(cin>>num1>>num2){
- string result;
- L1=num1.length();
- L2=num2.length();
- longer=L1-L2;
- if(longer>0){
- longer=1;
- i=num2.length();
- }
- else{
- longer=2;
- i=num1.length();
- }
- //进行加法
- for(int j=1;j<=i;j++){
- add(num1[L1-j],num2[L2-j],a,sum,a);
- result.push_back(sum);
- }
- if(longer==0){
- if(a==1)result.push_back('1');
- }
- else if(longer==1){
- for(int j=i+1;j<=L1;j++){
- add(num1[L1-j],'0',a,sum,a);
- result.push_back(sum);
- }
- if(a==1)result.push_back('1');
- }
- else{
- for(int j=i+1;j<=L2;j++){
- add(num2[L2-j],'0',a,sum,a);
- result.push_back(sum);
- }
- if(a==1)result.push_back('1');
- }
- out(result);
- }
- return 0;
- }
- //该片段来自于http://www.codesnippet.cn/detail/120520149532.html
来源: http://www.codesnippet.cn/detail/120520149532.html