两数相减

来源:互联网 发布:手机淘宝不能分享链接 编辑:程序博客网 时间:2024/06/17 12:27

两数相减

描述

给定两个自然数AB,求A-B的值。

输入

输入数据有多组,第一行为测试数据的组数n,下面的n行中,每行有两个数分别表示ABAB的最大位数不超过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;}

原创粉丝点击