目录
1.什么是高精度算法
高精度算法(High Accuracy Algorithm)是处理大数字的数学计算方法。在一般的科学计算中,会经常算到小数点后几百位或者更多,当然也可能是几千亿几百亿的大数字。一般这类数字统称为高精度数,高精度算法是用计算机对于超大数据的一种模拟加,减,乘,除,乘方,阶乘,开方等运算。对于非常庞大无法在计算机中正常存储的数字,将这个数字拆开,拆成一位一位或者是四位四位的存储到一个数组中, 用一个数组去表示一个数字,这样这个数字就被称为是高精度数。高精度算法就是能处理高精度数各种运算的算法,但又因其特殊性,故从普通数的算法中分离,自成一家。
(***下面的讲解分布于注释和图片中***)
2.高精度加法
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e5 + 10;
string s1, s2;
int a[N], b[N], c[N];
int main()
{
cin >> s1 >> s2;
int j = 1, k = 1;//a、b数组的下标都是从1开始的
for (int i = s1.size() - 1; i >= 0; i--) a[j++] = s1[i] - '0';//size()函数返回字符串中字符的数量
//字符串的索引是从0开始,s1.size()计算出字符串s1最后一个字符的索引(倒序输入)
//size()是std::string类的一个成员函数,用点运算符进行访问
for (int i = s2.size() - 1; i >= 0; i--) b[k++] = s2[i] - '0';
int ma = max(s1.size(), s2.size());//计算两个输入数字字符串的最大长度ma,确定后续计算的循环次数
int ans = 0;//用于存储每一位相加时的进位
for (int i = 1; i <= ma; i++)
{
ans = ans + (a[i] + b[i]);
c[i] = ans % 10;
ans = ans / 10;
}
if (ans) c[++ma] = ans;//**一定要注意最高位是否还有进位
for (int i = ma; i >= 1; i--)//倒序输出
{
cout << c[i];
}
return 0;
}
3.高精度减法
#include<iostream>
#include<algorithm>
using namespace std;