(高精是什么东西我相信大家都知道,我就不详细说了(不知道的百度))高精其实可以相当于是一个强模拟,它模拟的是一个列竖式计算,总体思想如下:
先读入两个字符串,再把它一个一个分解,分别存入两个数组中,如:
字符串1:123456789123456789
字符串2:987654321987654321
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
数组a:9 8 7 6 5 4 3 2 1 9 8 7 6 5 4 3 2 1
数组b:1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
这样就可以将它们的末尾相加,加到c数组中,处理进位并输出,非伪代码如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
string n,m;
int i,a[1001]={},b[1001]={},c[1001]={},lena,lenb,len,x=0;
cin>>n>>m; //输入两个字符串
lena=n.size();
lenb=m.size();
for(i=0;i<lena;i++) a[lena-i]=n[i]-'0';
for(i=0;i<lenb;i++) b[lenb-i]=m[i]-'0';//将字符串的末位移动到首位,容易处理加减。这里要特别注意的是c++的数组是从'0'开始的,所以循环要从零开始
if(lena>lenb) len=lena;else len=lenb;//选择字符串长度较大的相加
for(i=1;i<=len;i++)
{
c[i]=a[i]+b[i]+x;
x=c[i]/10;
c[i]=c[i]%10;
}
//两数相加,并处理进位
if(x>0)
{
len++;
c[len]++;
}
//如果还有首位有进位未处理,就在首位+1
for(i=len;i>=1;i--) cout<<c[i];//输出
return 0;
}