C++解决大整数加法

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;
}

    原文作者:大整数乘法问题
    原文地址: https://blog.csdn.net/begineerYY/article/details/79321297
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞