两数相减

两数相减

描述

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

posted @ 2017-05-29 16:16  让你一生残梦  阅读(845)  评论(0编辑  收藏  举报