C语言 简单易懂的高精度加法

场景

 我想大家在小学刚学开始学习列式计算时,应该都有被老妈拎着耳朵说怎么又忘记进一了,都幻想有个机器可以帮自己计算,现在你算看到的高精度加法就是这个原理。


问题描述

它关键的点有简单的几个

1.数据存储问题

当我们的 int 和 longlong也没有办法满足这个数的存储大小时我们该怎么办?

首先想到的就是拆分啊,把一个很长很长的数字拆成一位又一位这样不就方便储存了,这就用到了数组存储的方法

2.拆分之后怎么进行运算

这就简单多了,就和我们小学学的一样满十进一原则

知道这些就ok了,下面看看代码的展示吧!


代码展示

#include<stdio.h>
#include<string.h>
char s1[505],s2[505];
int a[505],b[505],c[505];//定义里面外面都可以
int main()
{
	int la,lb,lc;
	scanf("%s",s1);
	scanf("%s",s2);//由于不知道数字的长度,先将其定义为字符型·
	la=strlen(s1);//直接计算长度没有‘/0’
	lb=strlen(s2);
	for(int i=0;i<la;i++)
		a[la-i]=s1[i]-'0';//将字符数组变成数字型便于计算,并使其倒序存储
	for(int i=0;i<lb;i++)
		b[lb-i]=s2[i]-'0';
	lc=(lb>la)?(lb+1):(la+1);//运用三目运算符,由于不论数有多大最大就是最长长度+1
	for(int i=0;i<=lc;i++)
	{
		c[i]+=a[i]+b[i];//由于c[i]可能不为0,所以也要参与累加
		c[i+1]=c[i]/10;//进位
		c[i]=c[i]%10;//取余
	}
	if(c[lc]==0&&lc>0)//如果最高为0,就将其去除
		lc--;
	for(int i=lc;i>0;i--)
		printf("%d",c[i]);	
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值