我们的计算机在处理一些大数据的问题时,有的数据会超出其定义的类型,最大的就是long
long类型,如果数据过大,导致我们的计算机无法计算,那我们这时候就采取高精度算法;
这里介绍+-*/,其基本思想就是利用数组,把每一位计算后的数存入数组当中保存,然后在逐个输出。
我们用a+b为例子,假设这两个数都很大,我们无法用基本类型读入。
这个时候我们先想办法,如何把两个数字读写进来,这个时候我们想到了字符串,把这个数当作字符,这样无论它多大我们都能够处理。
读入这两个数字之后我们就要把它用数组存储起来,到时候相加的时候我们只要把每个数组上对应的数字相加,如何再处理进位就可以;
代码如下
这里我们为了方便,是倒着把他放在一起的,这样可以方便处理进位
然后我们再写相加的代码
在相加的时候我们一定要注意进位的问题;
在相加的时候,我们使用一个变量t来进行进位;
t+=a[i]+b[I],就是进位上加的两个数字
c[I]=t%10的意思就是进位的个数
t/=10把t的个位数去掉只剩下十位数,即只剩下这个位置的进位
最后还要判断t,如果t==1,那么我们还要补一个进位;
完整代码如下
#include<iostream>
using namespace std;
int A[1000089],B[1000089],C[1000089];
int add(int a[],int b[],int c[],int cnt)
{
int t= 0;
for(int i=1;i<=cnt;i++)
{
t+=a[i]+b[i];
c[i]=t%10;
t/=10;
}
if(t) c[++cnt]=1;
return cnt;
}
int main()
{
string a,b;
cin>>a>>b;
int cnt1=0;
for(int i=a.size()-1;i>=0;i--)
{
A[++cnt1] = a[i]-'0';
}
int cnt2=0;
for(int i=b.size()-1;i>=0;i--)
{
B[++cnt2]=b[i]-'0';
}
int tot=add(A,B,C,max(cnt1,cnt2));
for(int i=tot;i>=1;i--)
cout<<C[i];
return 0;
}
同理,我们如果解决了加法,那么剩下的我们都可以使用这种进位的思想进行解决;从而解决高精度问题