高精度算法---加法

什么是高精度

高精度算法(High Accuracy Algorithm)是处理大数字的数学计算方法。在一般的科学计算中,会经常算到小数点后几百位或者更多,当然也可能是几千亿几百亿的大数字。一般这类数字我们统称为高精度数,高精度算法是用计算机对于超大数据的一种模拟加,减,乘,除,乘方,阶乘,开方等运算。对于非常庞大的数字无法在计算机中正常存储,于是,将这个数字拆开,拆成一位一位的,或者是四位四位的存储到一个数组中, 用一个数组去表示一个数字,这样这个数字就被称为是高精度数。

整个算法思路

先把两个数当成字符串****倒着存进数组
即高位存在数组后面,低位存在数组低位
顺便读取整数的位数
根据位数做加法—类似于竖式
加到最后一位,看是否存在进位,来进行扩位
最后别忘了倒着输出

位数与数组下标的问题

若从0开始存
最高位有进位的时候书的总位数要+1
为了后面倒着输出的时候有cnt-1流出富裕的一位

#include <iostream>
using namespace std;
//做题技巧一般数组在函数外面设置成常量
//初始化数组 100000
const int N=1000010;
int A[N],B[N],c[N];

//高精度加法数组
int add(int a[],int b[],int c[],int cnt){
    int t=0;//得有个变量用来表示进位,cnt存俩个数组的每位对应的数,以及前一位进到本位的进位1来之和
    for(int i=0;i<cnt;i++){
        t=a[i]+b[i]+t;
        c[i]=t%10;
        t/=10;
    }
    if(t)c[cnt++]=1;
    return cnt;
}


int main(){
    string a;
    string b;
    cin>>a>>b;
    //用一个变量来统计数组的长度,即每个数的位数
    //.size()不算字符串末尾的\0
    //且c++ string字符串里的末尾不一定有\0
    int cnt1=0;
    for(int i=a.size()-1;i>=0;i--)
        A[cnt1++]=a[i]-'0';
    int cnt2=0;
    for(int i=b.size()-1;i>=0;i--)
        B[cnt2++]=b[i]-'0';
    int tot=add(A,B,c,max(cnt1,cnt2));
    
    for(int i=tot-1;i>=0;i--) cout<<c[i];
   // if(c[tot]==0){
    //for(int i=tot-1;i>=0;i--)
    //cout<<c[i];}
    //else for(int i=tot;i>=0;i--) cout<<c[i];
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值