高精度算法(加法)

应用情况

在C/C++中,数据超出范围,不能用long long数据类型(范围:【-2^{63}2^{63}-1】,精度为18位)^{^{}}或double(精度:15-16位)储存,需要使用高精度算法

当两个整数和小于10^{9},则可使用int/long long类型来定义变量求解

当两个整数和小于10^{100},则需要用高精度算法来解决

思想 数组模拟高精度算法

将两个整数定义为字符串类型,模拟数字计算,将数字从个位至十位、百位。。。逐位单独相加(与数学加法中列竖式运算一致)

算法核心

例:两整数加法为A+B=C

    c[i]+=a[i]+b[i];//上一位加法结果的进位数累加起来
    c[i+1]=c[i]%10;
    c[i]=c[i]%10; 

代码

#include <iostream>
#include <cstring>
using namespace std;
int main ()
{
    char s1[101],s2[101];//将两整数定义为字符数组 
    int a[101],b[101],c[101];
    cin>>s1>>s2;
    int la,lb,lc;
    la=strlen (s1);
    lb=strlen (s2);
    
    //将两字符串转化为数字进行计算
    //当两整数位数不一致时,但计算要从末位开始,故要将字符倒置
    //将转置后的两整数储存在了新的数组里 
    for (int i=0;i<la;i++)
        a[la-i]=s1[i]-'0';//减去'0'即将 字符串转化为数字了
    for (int i=0;i<lb;i++)
        b[lb-i]=s2[i]-'0';     
     
    lc=max(la,lb)+1;//加1,给进位留位
    for(int i=1;i<=lc;i++)
    {
        c[i]+=a[i]+b[i];//上一位加法结果的进位数累加起来
        c[i+1]=c[i]%10;
        c[i]=c[i]%10; 
    }
    if(c[lc]==0&&lc>0) lc--;//删除前导0 
    for(int i=lc;i>0;i--)
       cout<<c[i];
    return 0;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值