高精度数的加法

文章介绍了如何处理超出longlong范围的高精度数,通过使用char数组存储并转换为int数组进行运算。首先展示了简单的输入和输出示例,然后讨论了倒序存储以适应竖式加法的需求,并给出了进位加法的完整代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在进行高精度数的运算之前,我们先搞清楚一下定义:

我们把超出long long定义范围的整数叫做高精度数,也叫做大数。


对于这种无法存储的死皮赖脸的整数,只好使用char数组给他一锅端了存储,再存进int数组进行运算。

如下是一个存储再输出高精度数的范例,供参考。

#include<iostream>
using namespace std;
int main()
{
    char a[1000];
    cin >> a;
    cout << a;
    return 0;
}

很简单,对吧?

但是要进行运算,我们最好还是读入后存进int数组里

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
    char a[1000];
    int b[1000];
    cin >> a;
    for(int i = 0;i < strlen(a); i++)
    {
        b[i] = a[i] - 48;//SCAII码转换成数字
        cout << b[i];
    }
    return 0;
}

对于加法,由于我们竖式运算要进位,所以要把这堆恶心的char数组倒序存储。

如下是一个倒序存储程序。

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
	char a[1000];
	int b[1000];
	cin >> a;
	int y = strlen(a) - 1;
	for(int i = 0;i < strlen(a);i++)
	{
		b[i] = a[y] - 48;
		cout << b[i];
		y--;
	}
	return 0;
}

对于加法而言,我们先搞清楚一下步骤:

1.输入

2.倒序存储

3.每一位相加并判断进位

4.存储结果

5.将结果倒序输出


代码(可进位):

#include<iostream>
#include<cstring>
using namespace std;
int main() {
	char a[1000];
	char b[1000];
	int a1[1000] = {}, b1[1000] = {}, c1[1001] = {};
	cin >> a >> b;
	int x = 0, y = 0;
	if (strlen(a) > strlen(b)) {
		y = strlen(a);
	} else {
		y = strlen(b);
	}
	for (int i = 0; i < strlen(a) ; i++) {
		a1[i] = a[strlen(a) - i - 1] - '0';
	}
	for (int i = 0; i < strlen(b) ; i++) {
		b1[i] = b[strlen(b) - i - 1] - '0';
	}
	int c = 0;
	while (c < y) {
		c1[c] = a1[c] + b1[c] + x;
		x = c1[c] / 10;
		c1[c] %= 10;
		c++;
	}
	if (x) {
		c1[c] = x;
		c++;
	}
	for(int i = 0;i < c; i++)
	{
		cout << c1[c - 1 - i];
	}
	cout << endl;
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值