- #include <iostream>
- #include <string.h>
- #include <string>
- using namespace std;
- char s1[10005],s2[10005];
- int a[10005],b[10005],c[10005];
- int flag;
- int main()
- {
- cin>>s1;
- cin>>s2;
- int len1=strlen(s1),len2=strlen(s2);
- int p1=0,p2=0;
- if(s1[0]!='-' && s2[0]!='-')
- {
- for(int i=len1-1;i>=0;i--) a[p1++]=s1[i]-'0';
- for(int j=len2-1;j>=0;j--) b[p2++]=s2[j]-'0';
- int len=len1>len2?len1:len2;
- for(int i=0;i<=len-1;i++)
- {
- c[i]+=a[i]+b[i];
- while(c[i]>=10)
- {
- c[i]-=10;
- c[i+1]+=1;
- }
- }
- if(c[len]!=0) cout<<c[len];
- for(int i=len-1;i>=0;i--) cout<<c[i];
- cout<<endl;
- }
- else if(s1[0]=='-' && s2[0]=='-')
- {
- for(int i=len1-1;i>=1;i--) a[p1++]=s1[i]-'0';
- for(int j=len2-1;j>=1;j--) b[p2++]=s2[j]-'0';
- int len=len1>len2?len1:len2;
- for(int i=0;i<=len-1-1;i++)
- {
- c[i]+=a[i]+b[i];
- while(c[i]>=10)
- {
- c[i]-=10;
- c[i+1]+=1;
- }
- }
- //if(c[len]!=0) cout<<c[len]; 因为负号原因, 减 1, 可以省去, 用下面一行
- cout<<'-';
- if(c[len-1]!=0) cout<<c[len-1];
- for(int i=len-1-1;i>=0;i--) cout<<c[i];
- cout<<endl;
- }
- else if(s1[0]=='-' && s2[0]!='-')
- {
- for(int i=0;i<=len1-1;i++) s1[i]=s1[i+1];
- len1=strlen(s1);
- if(len1==len2)
- {
- if(strcmp(s1,s2)>0) flag=-1;
- else if(strcmp(s1,s2)<0) flag=1;
- for(int i=len1-1;i>=0;i--) a[p1++]=s1[i]-'0';
- for(int j=len2-1;j>=0;j--) b[p2++]=s2[j]-'0';
- int len=len1>len2?len1:len2;
- if(flag==0) cout<<'0'<<endl;
- else if(flag==-1)
- {
- for(int i=0;i<=len-1;i++)
- {
- c[i]+=a[i]-b[i];
- while(c[i]<0)
- {
- c[i]+=10;
- c[i+1]-=1;
- }
- }
- cout<<'-';
- }
- else if(flag==1)
- {
- for(int i=0;i<=len-1;i++)
- {
- c[i]+=b[i]-a[i];
- while(c[i]<0)
- {
- c[i]+=10;
- c[i+1]-=1;
- }
- }
- }
- /*if(c[len]!=0) cout<<c[len];
- for(int i=len-1;i>=0;i--) cout<<c[i];*/ // 减法不能这么输出, 如 12,19, 是 07, 可能会减出前导 0
- int j;
- for(j=len;j>=0;j--) if(c[j]!=0) break;
- for(int i=j;i>=0;i--) cout<<c[i];
- cout<<endl;
- }
- else if(len1>len2)
- {
- for(int i=len1-1;i>=0;i--) a[p1++]=s1[i]-'0';
- for(int j=len2-1;j>=0;j--) b[p2++]=s2[j]-'0';
- int len=len1>len2?len1:len2;
- for(int i=0;i<=len-1;i++)
- {
- c[i]+=a[i]-b[i];
- while(c[i]<0)
- {
- c[i]+=10;
- c[i+1]-=1;
- }
- }
- cout<<'-';
- int j;
- for(j=len;j>=0;j--) if(c[j]!=0) break;
- for(int i=j;i>=0;i--) cout<<c[i];
- cout<<endl;
- }
- else if(len1<len2)
- {
- for(int i=len1-1;i>=0;i--) a[p1++]=s1[i]-'0';
- for(int j=len2-1;j>=0;j--) b[p2++]=s2[j]-'0';
- int len=len1>len2?len1:len2;
- for(int i=0;i<=len-1;i++)
- {
- c[i]+=b[i]-a[i];
- while(c[i]<0)
- {
- c[i]+=10;
- c[i+1]-=1;
- }
- }
- int j;
- for(j=len;j>=0;j--) if(c[j]!=0) break;
- for(int i=j;i>=0;i--) cout<<c[i];
- cout<<endl;
- }
- }
- else if(s1[0]!='-' && s2[0]=='-')
- {
- for(int i=0;i<=len2-1;i++) s2[i]=s2[i+1];
- len2=strlen(s2);
- if(len1==len2)
- {
- if(strcmp(s1,s2)>0) flag=1;
- else if(strcmp(s1,s2)<0) flag=-1;
- for(int i=len1-1;i>=0;i--) a[p1++]=s1[i]-'0';
- for(int j=len2-1;j>=0;j--) b[p2++]=s2[j]-'0';
- int len=len1>len2?len1:len2;
- if(flag==0) cout<<'0'<<endl;
- else if(flag==1)
- {
- for(int i=0;i<=len-1;i++)
- {
- c[i]+=a[i]-b[i];
- while(c[i]<0)
- {
- c[i]+=10;
- c[i+1]-=1;
- }
- }
- }
- else if(flag==-1)
- {
- for(int i=0;i<=len-1;i++)
- {
- c[i]+=b[i]-a[i];
- while(c[i]<0)
- {
- c[i]+=10;
- c[i+1]-=1;
- }
- }
- cout<<'-';
- }
- /*if(c[len]!=0) cout<<c[len];
- for(int i=len-1;i>=0;i--) cout<<c[i];*/ // 减法不能这么输出, 如 12,19, 是 07, 可能会减出前导 0
- int j;
- for(j=len;j>=0;j--) if(c[j]!=0) break;
- for(int i=j;i>=0;i--) cout<<c[i];
- cout<<endl;
- }
- else if(len1>len2)
- {
- for(int i=len1-1;i>=0;i--) a[p1++]=s1[i]-'0';
- for(int j=len2-1;j>=0;j--) b[p2++]=s2[j]-'0';
- int len=len1>len2?len1:len2;
- for(int i=0;i<=len-1;i++)
- {
- c[i]+=a[i]-b[i];
- while(c[i]<0)
- {
- c[i]+=10;
- c[i+1]-=1;
- }
- }
- int j;
- for(j=len;j>=0;j--) if(c[j]!=0) break;
- for(int i=j;i>=0;i--) cout<<c[i];
- cout<<endl;
- }
- else if(len1<len2)
- {
- for(int i=len1-1;i>=0;i--) a[p1++]=s1[i]-'0';
- for(int j=len2-1;j>=0;j--) b[p2++]=s2[j]-'0';
- int len=len1>len2?len1:len2;
- for(int i=0;i<=len-1;i++)
- {
- c[i]+=b[i]-a[i];
- while(c[i]<0)
- {
- c[i]+=10;
- c[i+1]-=1;
- }
- }
- cout<<'-';
- int j;
- for(j=len;j>=0;j--) if(c[j]!=0) break;
- for(int i=j;i>=0;i--) cout<<c[i];
- cout<<endl;
- }
- }
- return 0;
- }
来源: http://www.bubuko.com/infodetail-2831826.html