今天我们来讲讲高精度
高精度本质
高精度的本质就是竖式。用无限长的两个string字符串来存入高精度字符串,再像竖式一样进行累加。最后,处理所有进位。
代码样例
代码
高精度加法
#include <bits/stdc++.h>
using namespace std;
int a[10000000]={0},b[100000000]={0},c[100000000]={0};
int main() {
string x,y;
int jw;
cin>>x>>y;
int len=max(x.size(),y.size());
reverse(x.begin(),x.end());
reverse(y.begin(),y.end());
for(int i=0;i<x.size();i++){
a[i]=x[i]-'0';
}
for(int i=0;i<y.size();i++){
b[i]=y[i]-'0';
}
for(int i=0;i<len;i++){
c[i]=a[i]+b[i];
c[i]+=jw;
jw=c[i]/10;
c[i]%=10;
}
if(jw==1){
c[len]=jw;
len++;
}
for(int i=len-1;i>=0;i--){
cout<<c[i];
}
return 0;
}
讲解
定义头文件
#include <bits/stdc++.h>
输入两个数
cin>>x>>y;
存入两数最长的长度
int len=max(x.size(),y.size());
颠倒两数,按竖式末尾对齐
reverse(x.begin(),x.end());
reverse(y.begin(),y.end());
把两串数据有效完全的存入两个一维数组中
for(int i=0;i<x.size();i++){
a[i]=x[i]-'0';
}
for(int i=0;i<y.size();i++){
b[i]=y[i]-'0';
}
像竖式一样相加,并处理进位
for(int i=0;i<len;i++){
c[i]=a[i]+b[i];
c[i]+=jw;
jw=c[i]/10;
c[i]%=10;
}
处理余下的一个进位
if(jw==1){
c[len]=jw;
len++;
}
输出所有数据
for(int i=len-1;i>=0;i--){
cout<<c[i];
}