栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c++实现长正整数的求和

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c++实现长正整数的求和

最近在学习c++的时候,遇到了长整数求和的问题,受制于整型字节数的限制,我们知道整型数据不可能无限大,那么我们可以模拟加法竖式计算的过程来对长整数进行求和。

代码如下:

#include 
using namespace std;

int getNumberLen(char number[]);
void tranCharToInt(char number[], int num[100]); 
void plusInt(int num1[], int num2[], int finalNumber[]);

int main()
{
	int num1[100] = { 0 }, num2[100] = { 0 }, finalNumber[100] = {0};
	char number1[101], number2[101];
	//输入
	cout << "请分别输入两个大整数(两者及其和的长度均不超过100位): " << endl;
	cin >> number1 >> number2;

	//将整数存入数组中
	tranCharToInt(number1, num1);
	tranCharToInt(number2, num2);
	
	//计算结果
	plusInt(num1, num2, finalNumber);

	//输出结果
	cout << "两长整数之和为: ";
	int i = 0;
	while (true)
	{
		if (finalNumber[i] == 0)
			i++;
		else
		{
			for (int j = i; j < 100; j++)
				cout << finalNumber[j];
			break;
		}
	}
	return 0;
}
//计算长整数长度
int getNumberLen(char number[])
{
	int i = 0, result = 0;
	while (number[i] != '')
	{
		result++;
		i++;
	}
	return result;
}
//将char转换为int存储起来
void tranCharToInt(char number[], int num[100])
{
	int i = 0,N = getNumberLen(number);
	while (number[i] != '')
	{
		// 0和9的ascii码值分别为48、57
		num[100 - N + i] = int(number[i]) - 48;
		i++;
	}
}
//实现长整数的竖式加法
void plusInt(int num1[], int num2[], int finalNumber[])
{
	int i = 0;
	while (num1[99 - i] != 0 || num2[99 -i] != 0)
	{
		if (num1[99 - i] + num2[99 - i] + finalNumber[99-i] >= 10)
		{
			//和满十进一
			finalNumber[99 - i] = (num1[99 - i] + num2[99 - i] + finalNumber[99 - i]) % 10;
			finalNumber[99 - i - 1] += 1;
		}
		//和未满十则不进一
		else finalNumber[99 - i] += num1[99 - i] + num2[99 - i];
		i++;
	}
}

原理其实很简单,但要考虑两个问题,1.如何将char类型的数字字符转换为int类型存储起来,2.如何实现竖式计算的过程

对于问题1,我们自然而然的会想到利用char字符亦是整型的本质,从而运用数字字符的ASCII码进行转换

对于问题2,竖式计算的两个过程,即相加满十进一,该位存储的是除以10的余数,不满十则不进一,该位存储的便是其和。

主要问题就是如此,具体过程见代码及注释。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/784136.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号