高精度算法,超出编译器计算范围的数该如何进行计算

正常的编译器由于每种数据类型的所占字节数有限,所以说计算范围有限,所以大于这个范围的数无法由编译器进行直接计算,所以由此引出了高精度算法

编写一个程序,计算200位以内的数的加减法

输入:
11111111111111111111111111111
1111111111111111111111111111

输出:
12222222222222222222222222222

实现代码如下:
int main()
{
string s1,s2;
int a1[210]={0},a2[210]={0},a3[210]={0};
getline(cin,s1);
getline(cin,s2);
for(int i=0;i<s1.size();i++)
{
a1[s1.size()-i-1]=s1[i]-'0'; //将字符串a1逆序放入数组a1中
}
for(int i=0;i<s2.size();i++)
{
a2[s2.size()-i-1]=s2[i]-'0'; //将字符串a2逆序放入数组a2中
}
int len=s1.size();
if(s2.size()>len)
{
len=s2.size();
}
for(int i=0;i<len;i++)
{
a3[i]=a1[i]+a2[i];
if(a3[i]>10) //这一步是为了计算进位
{
a3[i+1]=a3[i+1]+a3[i]/10;
a3[i]=a3[i]%10;
}
}
if(a3[len]!=0) //这一步是为了计算两个数相加是否位数比原来的位数更大
{
len++;
}
for(int i=len-1;i>=0;i--)
{
cout<<a3[i]; //从最后一位开始 ,倒序打印
}
system("pause");
return 0;
}

这个算法总的来说很有意思,以后可以多看看,明天可以看看减法的计算,以及乘法的计算等
但是我估计乘法会十分麻烦,可能接触不到,减法可以试着了解一下

posted @ 2025-07-05 21:16  暗神酱  阅读(5)  评论(0)    收藏  举报