<整数减法>
今天又看了一下以前做的小题目,感觉这个比较不错,虽然不是很难,但要注意的东西不少。
总时间限制: 1000ms 内存限制: 65536kB 描述 两个十进制非负整数M和N,计算二者的差,既M-N。 M、N最多可以是长度为200位的整数。 输入 多组数据,每组数据先是一行表示M,然后一行表示N。M和N开头均无冗余的0。 输出 每行一个数,表示M-N,开头不能有冗余的0,既不能输出05这样的数,而应该直接输出5。 样例输入 9999 4567 0 1 样例输出 5432 -1
源代码:
#include<iostream> #include<cstring> using namespace std; int main() { int i,k,m,n,x,p,m1,n1,v,d; char a[200], b[200]; while( cin>>a>>b ) { int c[200]={0}; p=0; m=strlen(a); n=strlen(b); m1=m-1; n1=n-1; if(m > n) //a>b { for(i=0;i<n;i++) { if(a[m1]+p >= b[n1]) { a[m1]=a[m1]+p-b[n1]; p=0; m1--;n1--; } else { a[m1]=a[m1]+p+10-b[n1]; p=-1; m1--;n1--; } } for(i=m1;i>=0;) { if(a[i]+p-48<0) { a[i]=a[i]+p+10; p=-1; i--; } else break; } a[i]=a[i]+p; for(i=0;i<m-n;i++) if(a[i]-48 != 0) c[i]=(int)a[i]-48; for(i=m-n;i<m;i++) c[i]=(int)a[i]; for(i=0;i<m;i++) { if(c[i] != 0) break; } for(x=i;x<m;x++) cout<<c[x]; } if(m==n) //a,b的长度一样 { for(v=0;v<m;v++) { if(a[v]>b[v]) {d=1;break;} //a>b; if(a[v]==b[v]){d=2;} if(a[v]<b[v]) {d=0;break;} } if(d==2) cout<<"0"; //a=b; if(d==1) //a>b; { for(i=0;i<n;i++) { if(a[m1]+p >= b[n1]) { a[m1]=a[m1]+p-b[n1]; p=0; m1--;n1--; } else { a[m1]=a[m1]+p+10-b[n1]; p=-1; m1--;n1--; } } for(i=0;i<m-n;i++) if(a[i]-48 != 0) c[i]=(int)a[i]-48; for(i=m-n;i<m;i++) c[i]=(int)a[i]; for(i=0;i<m;i++) { if(c[i] != 0) break; } for(x=i;x<m;x++) cout<<c[x]; } if(d==0) //a<b; { for(i=0;i<n;i++) { if(b[n1]+p >= a[m1]) { b[n1]=b[n1]+p-a[m1]; p=0; m1--;n1--; } else { b[n1]=b[n1]+p+10-a[m1]; p=-1; m1--;n1--; } } cout<<"-"; for(i=0;i<m-n;i++) if(b[i]-48 != 0) c[i]=(int)b[i]-48; for(i=m-n;i<m;i++) c[i]= (int)b[i]; for(i=0;i<m;i++) { if(c[i] != 0) break; } for(x=i;x<m;x++) cout<<c[x]; } } if(n>m) //a<b; { for(i=0;i<m;i++) { if(b[n1]+p >= a[m1]) { b[n1]=b[n1]+p-a[m1]; p=0; m1--;n1--; } else { b[n1]=b[n1]+p+10-a[m1]; p=-1; m1--;n1--; } } for(i=n1;i>=0;) { if(b[i]+p-48<0) { b[i]=b[i]+p+10; p=-1; i--; } else break; } b[i]=b[i]+p; cout<<"-"; for(i=0;i<n-m;i++) if(b[i]-48 != 0) c[i]=(int)b[i]-48; for(i=n-m;i<n;i++) c[i]=(int)b[i]; for(i=0;i<n;i++) { if(c[i] != 0) break; } for(x=i;x<n;x++) cout<<c[x]; } cout<<endl; } return 0; }
看起来代码很长,其实都差不多,只是分的情况比较多而已。
书山有路勤为径,学海无涯苦作舟!!!
浙公网安备 33010602011771号