俩个大正整数相加

这个题听说的华为的题目。

前提是正整数。思路不难,主要注意细节即可!

#include <iostream>
#include <algorithm>
#include <stdlib.h>
using namespace std;

void add_bigdata(char * first_char,char *second_char,char *result)
{
	int len_first = strlen(first_char);
	int len_second = strlen(second_char);
	int len_min,len_max;
	//先反转
	reverse(first_char,first_char+len_first);
	reverse(second_char,second_char+len_second);

	len_max = max(len_first,len_second);
	len_min = min(len_first,len_second);

	char carry = 0;
	for(int i = 0; i < len_min ; i++)//处理含公共长度
	{
		char temp_sum = first_char[i] +  second_char[i] - '0';//任然是字符
		if(temp_sum + carry > '9')//不要用'10' -- 》 为俩个字符!!!
		{
			result[i] = temp_sum + carry -10;
			carry = 1;
		}
		else
		{
			result[i] = temp_sum + carry ;
			carry = 0;
		}
	}
	//下面统一处理串长的。
	char *left ;
	if(first_char[len_min] != '\0' )
	{
		left = first_char;
	}
	else
	{
		left = second_char;
	}

	int j = len_min;
	for( ; j < len_max; j++)
	{
		char temp_sum = left[j];//任然是字符
		if(temp_sum + carry > '9')
		{
			result[j] = temp_sum + carry -10;
			carry = 1;
		}
		else
		{
			result[j] = temp_sum + carry ;
			carry = 0;
		}
	}
	//处理末尾进位
	if(carry == 1)//有进位
	{
		result[j] = '1';
		result[j+1] = '\0';
	}
	else
	{
		result[j] = '\0';
	}
	//转换顺序
	reverse(result,result+strlen(result));
}


int main()
{
	char first_char[100];
	char second_char[100];
	char result[101];//可能进位

	cout<<"first  data: ";
	cin>>first_char;
	cout<<"second data: ";
	cin>>second_char;
	cout<<endl;

	add_bigdata(first_char,second_char,result);

	cout<<result<<endl;

}


//注意下不要稀里糊涂的用‘10’,这个可能会犯错,当数字用!

//char 数组小端存储。

//另一种思路,是直接先相加,再反转。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值