你有没有遇到过这种题:
1000100010001000100010001000100×1465
这种题可以用巧妙的方法计算,但如果是两个500位无规律的数相乘,那就不可以了。
这时候就要用到一种算法——高精度运算。
高精度算法(High Accuracy Algorithm)是处理大数字的数学计算方法。
在一般的科学计算中,会经常算到小数点后几百位或者更多,当然也可能是几千亿几百亿的大数字。一般这类数字我们统称为高精度数,高精度算法是用计算机对于超大数据的一种模拟加,减,乘,除,乘方,阶乘,开方等运算。
对于非常庞大的数字无法在计算机中正常存储,于是,将这个数字拆开,拆成一位一位的,或者是四位四位的存储到一个数组中, 用一个数组去表示一个数字,这样这个数字就被称为是高精度数。
举个例子:高精度加法
利用竖式的原理,逐位相加。
#include <iostream>
#include <vector>
#include <string>
using namespace std;
vector<int> add (vector<int> &A,vector<int> &B){
if(A.size()<B.size()) return add(B,A);
vector<int> C;
int t = 0;
for(int i = 0; i < A.size() ;i ++){
t += A[i];
if(i < B.size()) t+=B[i];
C.push_back(t%10);
t /= 10;
}
if(t) C.push_back(t);//最后的进位压入数组
return C;
}
int main()
{
string a,b;
cin>>a>>b;
vector<int> A, B;
//个位放第一位
for(int i = a.size() - 1;i >= 0;i --) A.push_back(a[i]-'0');
for(int i = b.size() - 1;i >= 0;i --) B.push_back(b[i]-'0');
auto C = add(A,B);
for(int i = C.size()-1; i >=0 ; i--) printf("%d",C[i]);
return 0;
}
减法、乘法同理。
你会了吗?