高精度加法
高精度
首先,在c++中,有int和long long两种创建变量的形式,但是,随说long long(可以放最长的那个)可以放大的变量,但是最终仍然是有限的(最多放16位的数),然而,我们在面对更高数位时候的程序时该怎么办呢?
这时,高精度算法出现了 。 在高精度的原理中,我们要将很长无法用int 或者long long来求出来的运算通过字符串(string) 来运算,因为string可以是几乎无限的。 通过string的计数方式,我们就可以将很长的数字进行分开计算,从而做到long long等变量做不到的计算。
高精度加法
基础高精度有4中,分别是加减乘除。
在加法中,我们需要理清思路。假设是两个不超过240位的正整数,首先,我们需要两个字符串来输入变量。之后,我们可以再创建两个数组来演绎加法的过程,和一个放结果的数组!!!!注意!!!!加法的过程不是简单的加减,而是要像小学一样,从个位数开始对齐,因此,我们在输入数组的时候就需要从后往前输入,而最前面的数则放零。 在考虑到每个数位(字符串)与数组的下标有对应的比值,我们只需在每个不同的数组中找到即可。在这种“竖式计算”的里面,我们还需要注意进位的规则,即满10进1,因此,我们还需要创建变量用来推算进位,如果那个数字/10等于1的话,我们便可以放进那个进位的变量中,最后再%10即可得出进1后的余数,并放进得出结果的那个数组里面。 记住!!!!!进位变量在下一位后清零!!!
最后,我们在输出的时候,需要排除前面的数字,一个while循环即可,如果到了第一个非零数后,循环后面的位置即可。
程序例子
#include<bits/stdc++.h>
using namespace std;
string s1,s2;
int a[251],b[251],c[251],d1,d2,jw,d=1;
int main()
{
cin>>s1>>s2;
d1=s1.size();
d2=s2.size();
for(int i=0;i<d1;i++)
a[i+251-d1]=s1[i]-48;
for(int i=0;i<d2;i++)
b[i+251-d2]=s2[i]-48;
for(int i=250;i>=1;i--)
{
c[i]=a[i]+b[i]+jw;
jw=c[i]/10;
c[i]%=10;
}
while(d<250&&c[d]==0)
d++;
for(int i=d;i<=250;i++)
cout<<c[i];
return 0;
}