提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 一、高精度是什么、
- 二、高精度加法原理
前言
滚去学习
一、高精度是什么?
高精度是在c/c++中可以运算超级位数的算法
二、高精度加法原理
运用现实的加法运算方法
2511111
+ 611111
--------------
3122222
因为输入的数据十分的大,long long 也没有办法存下,
所以我们分别用两个字符串s1,s2存刚输入的两个数
string s1,s2;
cin>>s1>>s2;
因为考虑到n位数加n位数可能加出n+1位数,所以不能把最高位放在数组最前面,需要逆序存储,所以我们再用两个整形数组n1,n2将字符串转换成数字饼逆序
for(int i=s1.size()-1;i>=0;i--)
n1[s1.size()-1-i]=s1[i]-'0';//s[i]-'0'得到的就是数字了,可以自己用阿斯克码值代换看看
for(int i=s2.size()-1;i>=0;i--)
n2[s2.size()-1-i]=s2[i]-'0';
存储好后,就开始加法运算,,再用数组s存结果,先个位数相加,大于等于10向后加1,可以得到代码
s[0]=s[0]+n1[0]+n2[0];
if(s[0]>=10)
{
s[0+1]=s[0]/10;
s[0]%=10;
}
以小见大,可见到
for(int i=0;i<l;i++)
{
s[i]=s[i]+n1[i]+n2[i];
if(s[i]>=10)
{
if(i+1==l)
l++;//当加到最后一位超位是长度 加1
s[i+1]=s[i]/10;
s[i]%=10;
}
}
最后得到全部代码
#include <bits/stdc++.h>
using namespace std;
int l,t=0,n1[999],n2[999],s[999];//更具题目开数组的大小
int main(){
string s1,s2;
cin>>s1>>s2;
l=max(s1.size(),s2.size());
for(int i=s1.size()-1;i>=0;i--)
n1[s1.size()-1-i]=s1[i]-'0';
for(int i=s2.size()-1;i>=0;i--)
n2[s2.size()-1-i]=s2[i]-'0';
for(int i=0;i<l;i++)
{
s[i]=s[i]+n1[i]+n2[i];
if(s[i]>=10)
{
if(i+1==l)
l++;
s[i+1]=s[i]/10;
s[i]%=10;
}
}
for(int i=l-1;i>=0;i--)
cout<<s[i];
return 0;
}
这就是高精度加法了