欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 【c++基础】高精度数不进位加法

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

2024/10/24 9:16:40 来源:https://blog.csdn.net/nruuu/article/details/140273468  浏览:    关键词:【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];//将相加的和倒序输出}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com