C语言大数相减(考虑相减为负数情况)

C语言大数相减(考虑相减为负数情况)

同时考虑到相减之后为负数的情况和相减之后为0的情况

#include <stdio.h>
#include <string.h>

int main()
{
	int aa[100]={0},bb[100]={0},cc[100];
	char a[100],b[100];
	scanf("%s %s",a,b);
	int m,n,len,flage1=0;
		/*
		flage1代表相减之后是否为负数 
		代表用前边那个数减后边那个数还是用后边那个数减去前边那个数 
		*/
	m = strlen(a);
	n = strlen(b);
	int i;
	/*
	将大数字符串转化为整数并反转,单个储存在数组之中
	*/
	for(i = 0; i < m; i ++)
	{
		aa[i] = a[m - i-1] - '0';
	}
	for(i = 0; i < n; i ++)
	{
		bb[i] = b[n - i-1] - '0';
	}
	/*
	判断第一个数与第二个数的大小,len取较大的一个数的长度
	如果前面那个数较大,则flage1 = 0;如果后面的那个数较大,则flage1 = 1;  
	*/
	if(m > n)
	{
		len = m;
		flage1 = 0;
	}
	else if(m == n)
	{
	//当长度相同时,再逐个 位数比较来判断数的大小 
		len = m; 
		for(i = n - 1; i >= 0; i --)
		{
			if(aa[i] > bb[i])
			{
				flage1 = 0;
				break;
			}
			if(aa[i] < bb[i])
			{
				flage1 = 1;
				break;
			}
		}
	}
	else
	{
		len = n;
		flage1 = 1;
	}
	
	if(flage1 == 0)
	{
		for(i = 0; i < len; i ++)
		{
			if(aa[i] >= bb[i])
			cc[i] = aa[i] - bb[i];
			else
			{
				aa[i] = aa[i] + 10;
				aa[i+1] = aa[i+1] - 1;
				cc[i] = aa[i] - bb[i];
			}
		}
	}
	if(flage1 == 1)
	{
		for(i = 0; i < len; i ++)
		{
			if(bb[i] >= aa[i])
			cc[i] = bb[i] - aa[i];
			else
			{
				bb[i] = bb[i] + 10;
				bb[i+1] = bb[i+1] - 1;
				cc[i] = bb[i] - aa[i];
			}
		}
	}
	//判断相减之后是否等于0 。。。例如:1111-1111=0000 经上边数组计算之后就会有4个0 
	int s = 0;
	for(i = 0; i < len; i ++)
	{
		if(cc[i] == 0)
		s = 0;
		else
		{
			s = 1;
			break;
		}
	}
	
	if(s == 0)		//s = 0就代表相减之后每个数组都储存的是 0,然后就输出一个0就行 
	{
		printf("0\n");
	}
	if(s != 0)		
	{
		if(flage1 == 0)
		{
			for(i = len-1; i >= 0; i --)
			{
				printf("%d",cc[i]);
			}
			printf("\n");
		}
		if(flage1 == 1)
		{
			printf("-");
			for(i = len-1; i >= 0; i  --)
			{
				printf("%d",cc[i]);
			}
			printf("\n");
		}
	}
	
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

活捉一只xiaozhu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值