高精度减法------C

 

高精度减法:
第一步:判断正负,如果s1比s2对应的整数小,结果为负,交换s1
第二步:将两个字符串,逆序存入2个整数输出测试
第三步:从左至右,逐位相减,不够借位
第四步:从右向左,逆序输出

天天提示文章质量不佳怎么办?当然是水字数啦,烦死了这个csdn

上代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h> 
enum
{
	LENGTH = 1000+1,
};
void nx(char [],int [],int );
int main(void) 
{
	//初始化为正 
	char fuhao = '+';
	//定义两个字符串,用来存入大数 
	char zf1[LENGTH];
	char zf2[LENGTH];
	gets(zf1);
	gets(zf2);
	//求出两个的长度
	int len1 = strlen(zf1);
	int len2 = strlen(zf2);
	//比较数据的大小,把大的数据存入zf1,方便计算
	if(len1<len2 || ((len1==len2)&&(strcmp(zf1,zf2)<0)))
	{
		//交换
		char temp[LENGTH];
		strcpy(temp,zf1);
		strcpy(zf1,zf2);
		strcpy(zf2,temp); 
		//说明上面小,要变成负号
		fuhao = '-'; 
		//长度也要交换
		int tmp =len1;
		len1 = len2;
		len2 = tmp; 
	}
	//然后逆序存入整型数组
	int num1[LENGTH]={0};
	int num2[LENGTH]={0};
	//保存结果 
	int jg[LENGTH] = {0};
	//写个逆序函数吧,存到整型数组里 
	nx(zf1,num1,len1);
	nx(zf2,num2,len2); 
	//找到两个中的最大长度
	int maxlen = len1>len2?len1:len2;
	int i;
	for(i = 0;i < maxlen;i++)
	{
		if(num1[i]<num2[i])
		{
			num1[i]+=10;
			num1[i+1]-=1;
		}
		jg[i] = num1[i] - num2[i];
	}
	//找到第一位不为0的数
	int pos = 0;
	for(i = maxlen-1;i >=0 ;i--)
	{
		if(jg[i]!=0)
		{
			pos = i;
			break;
		}
	}
	if(fuhao == '-')
		printf("%c",fuhao);
	for(i = pos;i >= 0;i--)
	{
		printf("%d",jg[i]);
	}
	return 0;
}

void nx(char zf[],int num[],int len)
{
	int i;
	for(i = 0;i < len;i++)
	{
		num[i] = zf[len-i-1]-'0';
	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值