【算法】高精度运算

你有没有遇到过这种题:

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;
}

减法、乘法同理。 

你会了吗?                      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值