超级简单的高精度加法 :不学不会,一学就废
神犇请划走
前言:
在c++中,有些数据太大,用不了整型加法,即使unsigned long long的最大范围最大也只到18446744073709551615,于是我们就要用高精度加法。
但别以为“高精度加法”听起来高大上,说难听了,就是学小学生列竖式。
思路:
说了是模拟小学生做列竖式计算,我们就先列个竖式逝世试试。
首先进行第一次运算
5 | 6 | 7 | |
---|---|---|---|
+ | 7 | 8 | 9 |
0 | 12 | 14 | 16 |
说出来你一定不信,这就是567+789的和。
接着进行第二次运算:进位!
5 | 6 | 7 | |
---|---|---|---|
+ | 7 | 8 | 9 |
1 | 3 | 5 | 6 |
进行两次运算之后,我们就可以发现答案已经出现。
总结
先读入两串字符(数据太大),因为要从右往左做,所以把两串字符倒着存入整型数组中。最后,进行两次运算。
上代码!!
#include<bits/stdc++.h>
using namespace std;
const int N=1000;
int lena,lenb,lenc,i,a[N],b[N],c[N];
char s[N];
int main(){
cin>>s+1;
lena=strlen(s+1);
for(i=1;i<=lena;i++)
a[lena+1-i]=s[i]-48;
cin>>s+1;
lenb=strlen(s+1);
for(i=1;i<=lenb;i++)
b[lenb+1-i]=s[i]-48;
//输入+初始化部分
for(i=1;i<=max(lena,lenb);i++)
c[i]=a[i]+b[i];
//第一次运算
for(i=1;i<=max(lena,lenb);i++)
{
c[i+1]+=c[i]/10;
c[i]%=10;
}
//第二次运算
if(c[i]!=0) lenc=i;
else lenc=i-1;
//最高位进位
for(i=lenc;i>=1;i--)
cout<<c[i];
//输出部分
return 0;//完结撒花
}
高精度就是那么水
点个赞再走吧