两个超大整数相加之数组实现

#include <iostream>
#include <cstring>
#define MAX 100
using namespace std;

void addStr(const char* num1, const char* num2, char sum[])
{
	int len1 = strlen(num1);
	int len2 = strlen(num2);

	for (int i = 0; i < MAX; i++)
		sum[i] = '0';
	//每一位都初始化为'0'

	int len = (len1 > len2) ? len1 : len2;
	//len表示较长的大数位数

	if (len1 < len2)
		for (int i = 1; i <= len2 - len1; i++)
			sum[i] = sum[i] + num2[i - 1] - '0';
	//注意sum[0]仍为'\0'以供carry
	else if (len1 > len2)
		for (int i = 1; i <= len1 - len2; i++)
			sum[i] = sum[i] + num1[i - 1] - '0';

	for (int f1 = len1 - 1, f2 = len2 - 1, f = len; f1 >= 0 && f2 >= 0; f1--, f2--, f--)
	{
		char temp = sum[f] + num1[f1] - '0' + num2[f2] - '0';
		if (temp  <= '9')
			sum[f] = temp;
		else
		{
			sum[f] = temp - 10;
			int j = f - 1;
			sum[j]++;	
			while (sum[j] == '9' + 1)
			{
				sum[j] = '0';
				sum[j - 1]++;
				j--;
			}
		}
	}

	if (sum[0] == '0')
	{
		for (int i = 0; i < len + 1; i++)
			sum[i] = sum[i + 1];
		sum[len] = '\0';
	}
	else
		sum[len + 1] = '\0';
	cout << num1 << " + " << num2 << " = " << sum << endl;
}
int main()
{
	char number1[MAX];
	char number2[MAX];
	char sum[MAX];

	cout << "请输入第一个大数:";
	cin >> number1;
	int i = 0;
	while (number1[i] != '\0')
	{
		if (number1[i] < '0' || number1[i] > '9')
		{
			cout << "输入错误!" << endl << "请重新输入:";
			cin >> number1;
			i = -1;
		}
		i++;
	}

	cout << "请输入第二个大数:";
	cin >> number2;
	int j = 0;
	while (number2[j] != '\0')
	{
		if (number2[j] < '0' || number2[j] > '9')
		{
			cout << "输入错误!" << endl << "请重新输入:";
			cin >> number2;
			j = -1;
		}
		j++;
	}
	addStr(number1, number2, sum);
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值