【重载】高精度计算——(二)加法

今天,我们开始学习高精度加法。
高精度加法涉及两个加数和一个和,所以,我们需要两个字符串与三个整型数组。

准备

在基础篇我们知道:高精度数在C++中没有定义,我们需要自己编写程序来计算,而最好的方法就是模拟竖式计算!
而在这里,我们必须知道:数字的长度就是字符串的长度!
所以,我们可以得高精度加法的原理,如下所示:
这里写图片描述
由此,我们推出高精度加法的核心代码

int c[100]={1};
void add(int a[],int b[])
{
    int x=0;//x是进位
    while(c[0]<=a[0]||c[0]<=b[0])
    {
        c[c[0]]=a[c[0]]+b[c[0]]+x;//第i位相加并加上进位
        x=c[c[0]]/10;//保存进位
        c[c[0]]%=10;//第i位的值
        c[0]++;
    }
}

注意:和可能会有前导零,处理它的方法很简单:

while(c[i]==0&&i>1) i--;

实现

代码非常简单,极易实现。
下面给出完整代码:

#include<cstdio>
#include<cstring>
int a[100],b[100],c[100],lena,lenb,lenc;
char s[100];
void Scan(int a[],int &len)
{
    memset(s,0,sizeof(s));
    gets(s);
    len=strlen(s);
    for(int i=0;i<len;i++) a[len-i]=s[i]-'0';
}
void Print()
{
    for(int i=lenc;i>0;i--) printf("%d",c[i]);
}
void add()
{
    int x=0;
    while(lenc<=lena||lenc<=lenb)
    {
        c[lenc]=a[lenc]+b[lenc]+x;
        x=c[lenc]/10;
        c[lenc]%=10;
        lenc++;
    }
    lenc++;
    while(c[lenc]==0&&lenc>1) lenc--;
}
int main()
{
    Scan(a,lena);
    Scan(b,lenb);
    add();
    Print();
    return 0;
}

现在,你已经学会了高精度加法,下一节我们将学习高精度减法。
补博客计划:重载运算符相关文章:
1. 【重载运算符】高精度计算——(三)减法
2. 【重载运算符】高精度计算——(四)高精乘低精
3. 【重载运算符】高精度计算——(五)高精乘高精
4. 【重载运算符】高精度计算——(六)高精除以低精
5. 【重载运算符】高精度计算——(七)高精除以高精
6. 【重载运算符】高精度计算——(八)超级结构体—BigInt
7. 【重载运算符】比较运算符——(九)STL下结构体内的重载

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值