Fork me on GitHub


3180:整数减法
查看 提交 统计 提示 提问
时间限制: 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<cstdio> #include<cstring> #include <string> #include <cstdlib> bool cmp1(char *a,char *b,int aa,int bb) { if(aa<bb) return 0; else if(aa>bb) return 1; else return strcmp(a,b)<0?0:1; } int main() { // freopen("in.txt","r",stdin); int i,j,n,k,lena,lenb;char a[201],b[201];int x[201],y[201]; while(~scanf("%s %s",a,b)) { if(strcmp(a,b)==0) {printf("0\n");continue;} lena=strlen(a); lenb=strlen(b); if(cmp1(a,b,lena,lenb)) { j=0; for(i=lena-1;i>=0;i--) x[j++]=a[i]-'0'; j=0; for(i=lenb-1;i>=0;i--) y[j++]=b[i]-'0'; for(i=0;i<lenb;i++) { x[i]-=y[i]; if(x[i]<0) {x[i]+=10;x[i+1]--;} } while(x[i]<0) { x[i]+=10;x[++i]-=1; } while(x[lena-1]==0) lena--; for(i=lena-1;i>=0;i--) printf("%d",x[i]); } else { printf("-"); j=0; for(i=lenb-1;i>=0;i--) x[j++]=b[i]-'0'; j=0; for(i=lena-1;i>=0;i--) y[j++]=a[i]-'0'; for(i=0;i<lena;i++) { x[i]-=y[i]; if(x[i]<0) {x[i]+=10;x[i+1]--;} } while(x[i]<0) { x[i]+=10;x[++i]-=1; } while(x[lenb-1]==0) lenb--; for(i=lenb-1;i>=0;i--) printf("%d",x[i]); } printf("\n"); } return 0; }

 

posted on 2013-03-05 21:49  huashiyiqike  阅读(230)  评论(0编辑  收藏  举报