两数相减
两数相减
描述
给定两个自然数A和B,求A-B的值。
输入
输入数据有多组,第一行为测试数据的组数n,下面的n行中,每行有两个数分别表示A,B。A和B的最大位数不超过1000位。
输出
输出A-B的值。
样例输入
3
1 1
10 2
1000 2000
样例输出
0
8
-1000
代码如下:
#include<stdio.h> #include<string.h> int main() { char a[1005],b[1005]; int x[1005],y[1005],c[1005]; int i,j,t,n,len,len1,k; scanf("%d",&n); while(n--) { gets(a); scanf("%s%s",&a,&b); len=strlen(a); len1=strlen(b); if(len>=len1) j=len;else j=len1; memset(x,0,sizeof(x)); memset(y,0,sizeof(y)); memset(c,0,sizeof(c)); t=j-1; for(i=len-1;i>=0;i--,t--) x[t]=a[i]-'0'; t=j-1; for(i=len1-1;i>=0;i--,t--) y[t]=b[i]-'0'; for(i=0;i<j;i++) { c[i]=x[i]-y[i]; } for(k=0;k<j;k++){ if(c[k]!=0) break; } if(k==j) printf("0\n"); else { if(c[k]>0){ for(i=j-1;i!=k;i--){ if(c[i]<0){ c[i] = 10+c[i]; c[i-1]--; } } if(c[k]==0) k=k+1; for(int i=k;i<j;i++) printf("%d",c[i]); printf("\n"); } else{ for(i=j-1;i!=k;i--){ if(c[i]>0){ c[i] = c[i]-10; c[i-1]++; } } if(c[k]==0) k=k+1; printf("-"); for(int i=k;i<j;i++) printf("%d",-c[i]); printf("\n"); } } } return 0; }