两数相减
描述
给定两个自然数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;
}