应用情况
在C/C++中,数据超出范围,不能用long long数据类型(范围:【,-1】,精度为18位)或double(精度:15-16位)储存,需要使用高精度算法
当两个整数和小于,则可使用int/long long类型来定义变量求解
当两个整数和小于,则需要用高精度算法来解决
思想 数组模拟高精度算法
将两个整数定义为字符串类型,模拟数字计算,将数字从个位至十位、百位。。。逐位单独相加(与数学加法中列竖式运算一致)
算法核心
例:两整数加法为A+B=C
c[i]+=a[i]+b[i];//上一位加法结果的进位数累加起来
c[i+1]=c[i]%10;
c[i]=c[i]%10;
代码
#include <iostream>
#include <cstring>
using namespace std;
int main ()
{
char s1[101],s2[101];//将两整数定义为字符数组
int a[101],b[101],c[101];
cin>>s1>>s2;
int la,lb,lc;
la=strlen (s1);
lb=strlen (s2);
//将两字符串转化为数字进行计算
//当两整数位数不一致时,但计算要从末位开始,故要将字符倒置
//将转置后的两整数储存在了新的数组里
for (int i=0;i<la;i++)
a[la-i]=s1[i]-'0';//减去'0'即将 字符串转化为数字了
for (int i=0;i<lb;i++)
b[lb-i]=s2[i]-'0';
lc=max(la,lb)+1;//加1,给进位留位
for(int i=1;i<=lc;i++)
{
c[i]+=a[i]+b[i];//上一位加法结果的进位数累加起来
c[i+1]=c[i]%10;
c[i]=c[i]%10;
}
if(c[lc]==0&&lc>0) lc--;//删除前导0
for(int i=lc;i>0;i--)
cout<<c[i];
return 0;
}