本文提供给刚入坑的新手
关于高精度的计算网上百度一下可以了解到许多
今天我分享的只是一些自己的心得, 更详细的可以去看原博主的原创文章 (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;
- }
以上就是源码了虽然更改不大, 但是我觉得加入输出是对新手来说很有必有的.
来源: https://www.cnblogs.com/shuaishuaiayun/p/10564522.html