先说说高精度运算的概念:
是指参与运算的数(加数,减数,因子……)范围大大超出了标准数据类型(整型,实型)能表示的范围的运算。例如,求两个200位的数的和。这时,就要用到高精度算法了。(摘自百度百科)。
今天我遇到的题目是200位以内的,python3可以一行就AC…… 代码如下:
print(sum(map(int, input().split())))
我是用string写的,两个数达到5000位的时候我的程序就WA了……估计要用char二维数组吧 实际测试2个数都在1500位左右的时候还是可以正确得出结果的
原理就是模拟手算
/* 高精度加法 1500位以内*/
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s1,s2;
cin>>s1>>s2;
int a[2000]={0},b[2000]={0},c[2000]={0},i,j,len,temp; //len 输入的两个字符串长度的最大值
//将字符串对齐存入数组,且两个数字是靠右对齐,前面均预留一位一方有进位的情况
if(s1.length()>=s2.length())
{
len=s1.length();
for(i=1;i<=len;i++)
{
a[i]=s1[i-1]-'0';
}
for(i=s1.length()-s2.length()+1;i<=len;i++)
{
b[i]=s2[i-(s1.length()-s2.length()+1)]-'0';
}
}
else
{
len=s2.length();
for(i=1;i<=len;i++)
{
b[i]=s2[i-1]-'0';
}
for(i=s2.length()-s1.length()+1;i<=len;i++)
{
a[i]=s1[i-(s2.length()-s1.length()+1)]-'0';
}
}
//两数相加
for(i=len;i>=0;i--)
{
c[i]=a[i]+b[i]+temp;
temp=c[i]/10;
c[i]%=10;
}
//数字前多余的0不予输出
for(temp=0;temp<=len;temp++)
{
if(c[temp]!=0)
break;
}
//解决相加结果是0的情况
if(temp==len+1)
{
cout<<0;
}
//输出
for(i=temp;i<=len;i++)
{
cout<<c[i];
}
return 0;
}