高精度加法超详细教程

高精度加法

思路:

跟着我的思路慢慢走,你一定能看懂
1、因为我们要加的两个数非常大,所以先定义两个字符串,这样能把数输进去。
2、我们要把字符串中每一个字符(也就是一个数每一位)存到一个数组中,我们就要定义两个数组。
3、我们先举一个例子“123”+“322”,我们平常算的加法先算右边的,即先算2+3,但是我们数组存的是第一个分别为1和3,所以我们存进去的时候要反过来存,就是先存最后面的,设字符串是名字是s,数组名字是a,也就是a[0]=s[2]-‘0’(这里为什么要减去’0’,是因为这样可以把字符变为数字),好我们现在存好了,就开始加。
4、我们先找到这两个数中谁的位数多,我们后面会用,我们到时候比一下大小就行了,如:s1.size()>s2.size()我们就用s1.size()赋值给len,接着,我们就加一下这两个数。
5、好,我们加完了,肯定要开始进位了,比方说“958”+“364” 加起来的和数组第一位数就是“12”,也就是(名字为c吧)c[0]=12,c[1]=11,c[2]=12,我们知道见10进一位,我们就一个一个判断如果它大于等于10了,就从c[i+1]=c[i]/10+c[i+1],且c[i]=c[i]%10。(哦对了,最后一位数要是加起来也大于10的话我们是不是要多一位,举个例子“632+789=1421”是不是比原来Len=3时多了一位,所以c[len]!=0时,就加1
6、加好了,那么就一个一个输出就好了,来吧,上代码:

#include<iostream>
using namespace std;
#define int long long
signed main()
{
	string s1,s2;
	int a[201]={0},b[201]={0},c[201]={0},len=0;
	getline(cin,s1);
	getline(cin,s2);
	**这是第3**
	for(int i=0;i<s1.size();i++)
	{
		a[s1.size()-i-1]=s1[i]-'0';       **这就是上面的a[0]=s[2]-'0',那里面的是公式,让它能反过来**
	}
	for(int i=0;i<s2.size();i++)
	{
		b[s2.size()-i-1]=s2[i]-'0';
	}
	//
	len=s2.size();
	if(s1.size()>s2.size())
	{
		len=s1.size();
	}
	//两个数相加
	for(int i=0;i<len;i++)
	{
		c[i]=a[i]+b[i];
	}
	//
	for(int i=0;i<len;i++)
	{
		if(c[i]>=10)
		{
			c[i+1]=c[i+1]+c[i]/10;
			c[i]=c[i]%10;
		}
	}
	**这个就是我加粗里面的东西**
	if(c[len]!=0)
	{
		len++;
	}
	for(int i=len-1;i>=0;i--)
	{
		cout<<c[i];
	}
	return 0;
}

我觉得应该算详细了吧,希望可以帮到你。若有问题请大佬指出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值