一、什么是高精度计算?
利用计算机进行数值计算,有时会遇到精度高与计算机精确度高的问题,受到硬件的限制,往往达不到需要的精度。但是我们可以用程序设计来实现高精度计算。
二、加法的高精度计算
举一个正常加法计算的例子先:
代码如下(示例):
#include<iostream>
using namespace std;
int main(){
int a,b;
cin>>a>>b;
cout<<a+b<<endl;
return 0;
}
例子: 10 11 (输入) 21(输出)
但是,如果输入的两个数过大呢?
我们已知
最大的整型变量unsigned long long int 仅为 0~18446744073709551615
所以~
当我们输入
114514191981011451419198101145141919810 和
324324543854386589316418937491280274847时,该怎么计算呢?
于是,便就有了加法的高精度计算~
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int main(){
char a1[100],b1[100];
int a[100],b[100],c[100],lena,lenb,lenc,i,x;
memset(a,0,sizeof(a));//初始化数组
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
gets(a1);gets(b1);//输入数组
lena=strlen(a1);//获取两个数组的长度
lenb=strlen(b1);
for(i=0;i<=lena-1;i++){
a[lena-i]=a1[i]-48;//将输入的内容进行转化,方便计算和 逆序存储
}
for(i=0;i<=lenb-1;i++){
b[lenb-i]=b1[i]-48;
}
lenc=1;
x=0;
while(lenc<=lena||lenc<=lenb){
c[lenc]=a[lenc]+b[lenc]+x;//lenc位的结果
x=c[lenc]/10;//进位的计算 加法中只有1和0的可能(正整数)
c[lenc]%=10;//确定结果的lenc位
lenc++;//向前推进一位
}
c[lenc]=x;//确定最高位
if(c[lenc]==0){
lenc--;//如果最高位为0,则删去多余的0
}
for(i=lenc;i>=1;i--){
cout<<c[i];//逆序输出
}
cout<<endl;
return 0;
}
这下子就能进行高精度的计算了!