大数减法

实现输入两个超过整型范围的数之差

思路:

       输入的两个数要先比较大小,小数减大数当然要添负号。

       比如100 - 9 ,第一步0 - 9, 不够减,向高位借,十位上还是0,则10位变成9,

       再向高位借,百位上的1变0.

代码:

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
	char a[231],b[231],c[231];
	int lena,lenb,i,j,flag=0,k=0,x;
	scanf("%s%s",a,b);
	lena=strlen(a);
	lenb=strlen(b);
	for (i=0;i<lena;i++)
	  a[i]=a[i]-48;
	for (i=0;i<lenb;i++)
	  b[i]=b[i]-48;//全部转换为数字 
	  
	if (lena>lenb)
	  flag=1;
	else if (lena == lenb)
	{
		if (strcmp(a,b)>0)
		 flag=1;
	}//flag为1,代表a大于b 
	
	if (flag)//当a>b时 
	{
		for (i=lena-1,j=lenb-1;i>=0;i--,j--)
		{
			if (a[i]-b[j]<0&&j>=0)
			{
			  x=i;
			  a[x]=a[x]+10;
			  while (a[--x]==0)//高位是0的情况 
			  {
			  	a[x]=9;
			  }
			  a[x]=a[x]-1; //不是0的-1 
		    }
		    if (j<0) //当j<0是,则把a[i]的赋值到c数字中 
		      c[k++]=a[i];
		    else
			c[k++]=a[i]-b[j];
		}
		for (i=k-1;i>=0;i--)//去除前面多余的0
		{
			if (c[i]!=0)
			 break;
		 } 
		for (j=i;j>=0;j--)
		  printf("%c",c[j]+'0');
	}
	else//当a<b时 
	{
		for (i=lenb-1,j=lena-1;i>=0;i--,j--)
	    {
	    	if (b[i]-a[j]<0&&j>=0)
	    	{
	    		x=i;
	    		b[x]=b[x]+10;
	    		while (b[--x]==0)
	    		{
	    			b[x]=9;
				}
				b[x]=b[x]-1;			
	        }
	        if (j<0)
	           c[k++]=b[i];
	        else
	           c[k++]=b[i]-a[j];
		}
		for (i=k-1;i>=0;i--)
		  if (c[i]!=0)
		     break;
		putchar('-');
		for (j=i;j>=0;j--)
		  printf("%c",c[j]+'0');
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值