加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

大数减法

发布时间:2020-12-14 01:18:43 所属栏目:大数据 来源:网络整理
导读:实现输入两个超过整型范围的数之差 思路: ? ? ? ?输入的两个数要先比较大小,小数减大数当然要添负号。 ? ? ? ?比如100 - 9 ,第一步0 - 9,不够减,向高位借,十位上还是0,则10位变成9, ? ? ? ?再向高位借,百位上的1变0. 代码: #includeiostream#includ

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

思路:

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

? ? ? ?比如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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读