行业知识
秒懂百科,C++如此简单丨第十八天:高精度
���录
()前言
()模拟运算
高精度加法模版
优化
高精度减法模版
高精度乘法模版
结尾
Everyday English
Believe in yourself and all that you know. Know that there is something inside you that is greater than any obstacle.
相信自己和你所知道的一切。要知道你内心深处有着比任何障碍都更伟大的力量。
必看信息
▶本篇文章由爱编程的小芒果原创,首发于CSDN,未经许可,严禁转载。
▶本篇文章被收录于秒懂百科,C++如此简单专栏,欢迎订阅。
☆专栏亮点☆
1.每篇文章质量高,质量分保证在80分以上。
2.文章的内容清晰有条理,图文并茂,附有源代码。
3.每个知识点讲解详细,会有很多补充扩展。
4.若哪个知识点没有懂,可以私信我,我会尽可能地帮助你。
前言
在编程中,我们常常会遇到一些极大的数字。这些数字用long long和double是根本存不下的,所以这节课我们将介绍高精度。
模拟运算
高精度说白了就是模拟运算,首先我们先想一想在生活中我们是怎样计算整数加法的。
| 1 | 2 | 3 | 4 | 5 | |
| + | 7 | 8 | 7 | 6 | 5 |
| = | 9 | 1 | 1 | 1 | 0 |
在计算的过程中,我们会遇到一个特殊情况——进位。
如在计算个位的时候,5+5=10,写0进1,十位4+6+1=11,写1进1。
遇到这种情况该怎么办呢?因为我们知道一个原则“满十进一” ,那么两个数相加在一起一共有多少个整十,是不是就要进几?如8+9=17,有一个整十,所以要进一,以此类推。
而判断一个数由多少个整十最好的方法就是——除法,我们用一个数除以10,得到的就是一个数由几个十组成,注意:这里因为是整数,所以除法是会保留整数,而一个数对10取余不就是余下来的几个一吗?思路知道了,程序也就简单了。
高精度加法模版
#includeusing namespace std; const int N=510; //定义足够大的数组来存储大整数的每一位 int a[N],b[N],c[N]; int main() { string str1,str2; cin>>str1>>str2; // 将字符串逆序存储到数组中,方便从低位到高位进行加法运算 for (int i = 0; i 0) { len++; //如果最高位有进位,则长度加1 } //逆序输出结果 for (int i = len - 1; i >= 0; i--) { cout =10) { c[i]-=10; c[i+1]+=1; } } 高精度减法模版
高精度减法只需要把“进位”修改成“退位”即可。但需要注意以下几点:
1.判断正负数,如果A> str1 >> str2; // 确保str1 >= str2,这里不处理str1 = 0; i--) { cout str1 >> str2; // 将字符串逆序存储到数组中,方便从低位到高位进行计算 for (int i = 0; i = 0 && c[start] == 0) { start--; } // 输出结果 if (start >= 0) { for (int i = start; i >= 0; i--) { cout