欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++解决大整数加法

程序员文章站 2024-03-23 15:58:52
...

c++解决大整数加法

问题描述:求两个不超过200为的非负整数的和

输入数据:输入有两行,每行是一个不超过200位的非负整数,没有多于的前导0.

输出要求:输出只一行,即相加后的结果。结果里不能有多于的前导0,即如果结果是342,那么就不能输出0342.

输入样例:

2222222222222222222222222

3333333333333333333333333

输出样例:

5555555555555555555555555

解题思路:int类型数据最多10位,double类型数据最多64位,因此,不能直接利用int或double类型数据相加求解。应考虑用数组(为方便读入数据,采用字符数组),采用列竖式的思路,对位相加,在考虑进位,最终求解。

C++代码如下:

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
	//定义变量	
	char x1[200]={'\0'};//两个不超过200位的加数
	char x2[200]={'\0'};
	int carry[201]={0};//进位
	int result[201]={0};//和
	int i;//循环变量
	//输入
	cin>>x1>>x2;
	//求两char数组长度
	int len1=strlen(x1);
	int len2=strlen(x2);
	//反序
	strrev(x1);
	strrev(x2);
	//确定两序列长度的最大值
	int lenmax=len1*(len1>=len2)+len2*(len1<len2);
	//把char类型的加数数组转化为int
	int x11[200]={0};
	for(i=0;i<=len1-1;i++)
	{
		x11[i]=x1[i]-'0';
	}
	int x22[200]={0};
	for(i=0;i<=len2-1;i++)
	{
		x22[i]=x2[i]-'0';
	}
	//不考虑进位对应位相加
	for(i=0;i<=lenmax-1;i++)
	{
		result[i]=x11[i]+x22[i];
		result[i+1]=0;//用于防止超过lenmax后的一位
	}
	//考虑进位 完成最终求和
	for(i=0;i<=lenmax+1;i++)
	{
		carry[i+1]=result[i]/10;
		result[i]=result[i]%10+carry[i];
	}
	//若最高位为0,则不输出最高位
	if(result[lenmax]==0)
		i=lenmax-1;
	else
		i=lenmax;
	for(;i>=0;i--)
		cout<<result[i];
	cout<<endl;
return 0;
}

相关标签: Cpp 大整数加法