A+B(高精度)

本文介绍了一种使用字符数组进行高精度加法计算的方法。通过将输入的数字转换为字符数组,然后转换为整型数组,利用进位原理进行相加,并存储结果到新的整型数组中。最后,从后向前输出结果,去除前导零。

A+B高精度计算:

        我的思路是:用两个字符数组来装两个需要相加的数字,s1[MAXN],s2[MAXN],然后需要定义三个整型数组,num1[MAXN], num2[MAXN], sum[MAXN],然后通过strlen计算出两个数组的长度,然后将两个字符数组转换成整型数组,这个时候,我们知道,两个数的相加减,得到的结果的长度最多最多比两个数字的最大的数字的长度大一,因此我们就能够知道结果数字的长度最多等于max(第一个数字,第二个数字)+1,然后两个数字相加减可能会产生进位,因此我们需要定义一个整型jw变量,每一循环的时候,sum[i] = num1[i]+sum2[i]+j2; jw = sum[i]/10; sum[i] %= 10; 通过这样的循环我们就把结果放进了sum数组中,因为我们放的时候是倒着放的(后面的代码部分会显示出来),而定义的整型数组的初始值都是零,因此我们需要把零去掉,最后在输出结果。

代码部分如下:
        

#include <iostream>
#include <cstring>
using namespace std;

const int MAXN = 5e2+5;
char s1[MAXN], s2[MAXN];
int num1[MAXN], num2[MAXN], sum[MAXN];

int main(){
    cin >> s1 >> s2;
    
    int len1 = strlen(s1);
    for(int i=0; i<len1; i++)
        num1[i] = s1[len1-i-1]-'0';//将字符里的字符转换成整型数组中
    
    int len2 = strlen(s2);
    for(int i=0; i<len2; i++)
        num2[i] = s2[len2-i-1]-'0';
        
    int jw = 0;
    int len = max(len1, len2)+1;
    for(int i=0; i<len; i++){
        sum[i] = num1[i]+num2[i]+jw;
        jw = sum[i]/10;
        sum[i] %= 10;
    }
    
    for(int i=len-1; i>=0; i--)
        if(sum[i] == 0 && len>1)//(为什么len必须>1呢?因为假设计算的结果等于0,那么len=1,此时sum[i] = 0, 而如果此时没有len>1的条件,就会进行len--,那么在输出sum数组的时候就什么都没有了,len=0;)
            len--;
        else
            break;
            
    for(int i=len-1; i>=0; i--)
        cout << sum[i];
    
    cout << endl;
    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值