先来解释下什么是高精:当几个数大到任何一个数据类型都无法存储时,就需要用到高精了~
没什么好说的,上代码,解释尽在代码里~
高精加:
#include<bits/stdc++.h>
using namespace std;
//定义结构体
struct node{
string zi;
//重载运载符+
friend node operator+(node a, node b){
//第一个数每个存入数组(因为数组可以开老多了~)
int yi[550],er[550],he[550];
//初始化
memset(yi,0,sizeof(yi));
memset(er,0,sizeof(er));
memset(he,0,sizeof(he));
//赋值长度(存储两个数的长度)
int len1,len2;
len1=a.zi.size();
len2=b.zi.size();
//反转 (因为我们从1开始遍历,而数是正着的,(模拟竖式从后往前加))
reverse(a.zi.begin(),a.zi.end());
reverse(b.zi.begin(),b.zi.end());
//将用字符串存储的数传入数组
for(int i=0;i<len1;i++) yi[i]=a.zi[i]-48;//强转int类型
for(int i=0;i<len2;i++) er[i]=b.zi[i]-48;//强转int类型,too
//最大的长度
int len=max(len1,len2);
//统计数字和
for(int i=0;i<len;i++){
//统计当前数字每一位的和
he[i]+=yi[i]+er[i];
//如果要进位
if(he[i]>=10){
//进一位呗
he[i+1]+=1;
//当前数位
he[i]%=10;
}
}
//如果多出一位
if(he[len]!=0){
//长度增加
len++;
}
node ans;
//定义空串
ans.zi="";
//存入最后的值
for(int i=len-1;i>=0;i--){
ans.zi+=char(he[i]+48);
}
//返回~
return ans;
}
};
//快乐的定义
node a,b;
int main(){
//输入
cin>>a.zi>>b.zi;
//输出~
cout<<(a+b).zi;
return 0;
}
有错误或提问欢迎在评论区指出~