大数相加

两个大数相加: 在这里默认数据合适的情况下;并且不考虑符号位;如果考虑的话;

可以先比较两个无符号的大小;然后再做减运算;

思路:

1、创建两个临时空间,将字符串拷贝进去 然后初始复制为0,最后一位为'\0';然后再逐个拷贝进去;

2、创建和的数组;在原来的基础上多一位;

从第 max-len;开始递减 ,进行和运算;

sum=temp1[i]+temp2[i];

if(sum>9)和大于9 有进位;

   {

        if(i==1) overflow=1;

        over=1;

    sum%=10;

}

string get_sum(string str1, string str2)
{
	
	int n1 = str1.length();
	int n2 = str2.length();

	int over = 0;//有没有进位;
	int first_flow = 0;//溢出位,首位是否溢出
	int max_len = n1 > n2 ? n1 : n2;//找出最大的位数;砍谁的位数多
	char *temp1 = new char[max_len + 1];//给第一个字符串创建数组空间
	temp1[max_len] = '\0';//末尾为结束符;
	memset(temp1, '0', max_len);//其余的全都复制为‘0’
	for (int i = n1 - 1; i >= 0; i--)
		temp1[i] = str1[i];//然后逐个把原来的字符串复制进来;
	char *temp2 = new char[max_len + 1];
	temp2[max_len] = '\0';
	memset(temp2, '0', max_len);
	for (int i = n2 - 1; i >= 0; i--)
		temp2[i] = str2[i];

	char *result = new char[max_len + 2];
	memset(result, '0', max_len );
	result[max_len + 1] = '\0';
	for (int i = max_len-1; i >= 0; i--)
	{
		int temp_sum = temp1[i]-'0' + temp2[i]-'0' + over;
		
		
			if (temp_sum > 9)//如果某一位的和大于等于10,产生进位;
			{
				if (i == 0)//如果这时候是第一位的话;
				{
					first_flow = 1;//产生溢出位;

				}
				over = 1;
				result[i+1]= temp_sum- 10+'0';
			}
			else
			{
				over = 0;
				result[i+1] = temp_sum + '0';
			}
		
	}
	if (first_flow == 1)//如果有溢出的话,第一位赋值为1;
	{
		result[0] = 1+'0';
	}
	
	for (int i = 0; i < max_len + 1; i++)
		cout << result[i] << " ";
	string st = result;

	return st;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值