c++高精度计算(加法)
本文提供给刚入坑的新手
关于高精度的计算网上百度一下可以了解到许多
今天我分享的只是一些自己的心得,更详细的可以去看原博主的原创文章(https://blog.csdn.net/fanyun_01/article/details/79967170),在阅读完之后可以来我这文章食用。
注意事项:
1.因为超出了普通储存数据的范围,所以通过以字符的形式输入到数组当中。
2.储存是将字符串从后往前储存到数组当中的。
下面是源码,我是在老樊Lu码的原创源码上加以修改的:
-
#include<iostream>
-
#include<cstring>
-
using namespace std;
-
int main()
-
{
-
string str1,str2;
- int a[250],b[250],len; //数组的大小决定了计算的高精度最大位数
-
int i;
-
memset(a,0,sizeof(a));
-
memset(b,0,sizeof(b));
-
cin>>str1>>str2; //输入两个字符串
-
a[0]=str1.length(); //取得第一个字符串的长度
- for(i=1;i<=a[0];i++) //把第一个字符串转换为整数,存放在数组a中
-
a[i]=str1[a[0]-i]-'0'; //将第一个字符串中数据倒着输入到数组当中并用-'0'使其指向字符串中第一个字符
-
b[0]=str2.length(); //取得第二个字符串长度
-
for(i=1;i<=b[0];i++) //把第二个字符串中的每一位转换为整数,存放在数组B中
-
b[i]=str2[b[0]-i]-'0';
-
len=(a[0]>b[0]?a[0]:b[0]); //取两个字符串最大的长度
-
for(i=1;i<=len;i++) //做按位加法,同时处理进位
-
{
-
a[i]+=b[i];
-
cout<<"这是第 "<<i<<" 的值,此时a[i]= " <<a[i]; //在循环里面我决定使其更可视化,更能理解,于是加入了输出语句
-
a[i+1]+=a[i]/10;
-
cout<<"这是第 "<<i+1<<" 的值,此时a[i]= " <<a[i+1];
-
a[i]%=10;
-
cout<<"这是第 "<<i<<" 的值,此时a[i]= " <<a[i]<<"\n";
-
}
-
len++; //下面是去掉最高位的0,然后输出。
-
while((a[len]==0)&&(len>1)) len--;
-
for(i=len;i>=1;i--)
-
cout<<a[i];
-
return 0;
- }
以上就是源码了虽然更改不大,但是我觉得加入输出是对新手来说很有必有的。