【c++基础】高精度数不进位加法

高精度数不进位加法

谈及数字即可想到运算,那么高精度数怎么运算呢?今天来系统介绍一下高精度数的加法。
思考一下加法运算,我们可以简单将加法运算这样区分:

  1. 有无进位。
  2. 位数是否相同。
    这篇文章我们就来讨论一下无进位的高精度数计算。

相同位数无进位加法

这类的相对比较简单,我们只需要指定位数相加,然后正常顺序输出即可。

在这里插入图片描述

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

int main() {
    char a[1001] = {}, b[1001] = {}; // 定义字符数组存储输入的两个高精度数
    int a1[1001] = {}, b1[1001] = {}, c1[1001] = {}; // 定义整数数组用于存储转换后的高精度数及其和
    cin >> a >> b; // 输入两个高精度数
    int len = strlen(a); // 获取第一个高精度数的长度
    for(int i = 0; i < len; i++) {
        a1[i] = a[i] - '0'; // 将字符类型的数字转换为整数存储到a1数组中
        b1[i] = b[i] - '0'; // 将字符类型的数字转换为整数存储到b1数组中
        c1[i] = a1[i] + b1[i]; // 计算两个高精度数的对应位相加的和存储到c1数组中
    }
    for(int i = 0; i < len; i++) {
        cout << c1[i]; // 输出计算得到的高精度数的和
    }
    return 0;
}

不同位数无进位加法

问题来了,位数不同,如何完成加法呢?

我们拿出两个数举例:
例如:
321321321321 + 4564563
在这里插入图片描述

转换成数组以后,[0]位对齐,这时相加的结果并不是我们想要的 ,
毕竟我们做竖式运算时,是末尾对齐。
那要如何计算出正确答案呢?
在这里插入图片描述

1.将两个数组全都翻转。
2.翻转后[0]位对齐相加。
3.将翻转结果输出,即为我们想要的结果。

代码为:

    char a[1001]={},b[1001]={};        
	int a1[1001]={},b1[1001]={},c1[1001]={};	
	cin>>a>>b; 			
	int lena=strlen(a),lenb=strlen(b);
	int len=(lena>lenb?lena:lenb);//取较长数字的位数作为总位数
	for(int i=0;i<lena;i++){
		a1[i]=a[lena-1-i]-48;//将两个加数逆序转换成int型的数字
	}
	for(int i=0;i<lenb;i++){
		b1[i]=b[lenb-1-i]-48;//将两个加数逆序转换成int型的数字
	}
	for(int i=0;i<len;i++){
		c1[i]=b1[i]+a1[i];//对应位相加
	}
	for(int i=0;i<len;i++){
		cout<<c1[len-1-i];//将相加的和倒序输出
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值