基础算法之高精度

我们的计算机在处理一些大数据的问题时,有的数据会超出其定义的类型,最大的就是long 

long类型,如果数据过大,导致我们的计算机无法计算,那我们这时候就采取高精度算法;

这里介绍+-*/,其基本思想就是利用数组,把每一位计算后的数存入数组当中保存,然后在逐个输出。

我们用a+b为例子,假设这两个数都很大,我们无法用基本类型读入。

这个时候我们先想办法,如何把两个数字读写进来,这个时候我们想到了字符串,把这个数当作字符,这样无论它多大我们都能够处理。

读入这两个数字之后我们就要把它用数组存储起来,到时候相加的时候我们只要把每个数组上对应的数字相加,如何再处理进位就可以;

代码如下

这里我们为了方便,是倒着把他放在一起的,这样可以方便处理进位

然后我们再写相加的代码

在相加的时候我们一定要注意进位的问题;

在相加的时候,我们使用一个变量t来进行进位;

t+=a[i]+b[I],就是进位上加的两个数字

c[I]=t%10的意思就是进位的个数

t/=10把t的个位数去掉只剩下十位数,即只剩下这个位置的进位

最后还要判断t,如果t==1,那么我们还要补一个进位;

完整代码如下

#include<iostream>
using namespace std;
int A[1000089],B[1000089],C[1000089];
int add(int a[],int b[],int c[],int cnt)
{
    int t= 0;
    for(int i=1;i<=cnt;i++)
    {

        t+=a[i]+b[i];
        c[i]=t%10;
        t/=10;
    }
    if(t) c[++cnt]=1;
    return cnt;
}
int main()
{
    string a,b;
    cin>>a>>b;
    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;i>=1;i--)
        cout<<C[i];
    return 0;
}

同理,我们如果解决了加法,那么剩下的我们都可以使用这种进位的思想进行解决;从而解决高精度问题

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沉邬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值