#include<iostream> #include<string> #include<cstring> using namespace std; #define MAXSIZE 100 //高精度加减法 struct Data { int len; //数据长度 int s[MAXSIZE]; //保存数组 }; void StringToData(const string &s,Data &d) //将string 转化成Data { if(s.size()==0) return; memset(d.s,0,sizeof(d.s)); d.len=s.length(); for(int i=0;i<d.len;i++) { d.s[i]=s[d.len-i-1]-'0'; //比如说s="123",那么s依次为3,2,1 } } void Display(const Data &d) { for(int i=d.len-1;i>=0;i--) printf("%d",d.s[i]); } void Sub(Data &d1, Data &d2, Data &ret) //假设d1>=d2 { memset(ret.s,0,sizeof(ret.s)); ret.len=d1.len; for(int i=0;i<d1.len;i++) { ret.s[i]=d1.s[i]-d2.s[i]+10; d1.s[i+1]=d1.s[i+1]-1+ret.s[i]/10; ret.s[i]%=10; } int j=0; while(ret.s[j]==0 && j<ret.len) j++; if(j==ret.len) { ret.len=1; return; } while(ret.s[ret.len-1]==0) ret.len--; } void Add(Data &d1,Data &d2,Data &ret) //假设d1>=d2 { memset(ret.s,0,sizeof(ret.s)); ret.len=d1.len; for(int i=d2.len;i<d1.len;i++) //将多余的数据保存在ret中 ret.s[i]=d1.s[i]; for(int i=0;i<d2.len;i++) { ret.s[i]=d1.s[i]+d2.s[i]; } //进位处理,如果大于10就进1 { for(int i=0; i<d1.len;i++) { if(ret.s[i]>=10) { ret.s[i]-=10; ret.s[i+1]++; } } } if(ret.s[ret.len]>0) ret.len++; while(ret.s[ret.len-1]==0) ret.len--; } int main() { string s1,s2; Data a,b,res1,res2; while(cin >> s1 >> s2) { StringToData(s1,a); StringToData(s2,b); if(a.len>b.len) { Add(a,b,res1); Sub(a,b,res2); } else { Add(b,a,res1); Sub(b,a,res2); } Display(res1); printf("/n"); Display(res2); printf("/n"); } return 0; }