C++算法入门练习——大整数加法

给定两个非负整数a和b,计算a+b的结果。

注:不能使用语言特有的大整数类型将输入直接转换为整数来求解。

解题思路:

利用字符串类型,获取每一位上的数字进行运算,如果大于9,则发生进位,用一个flag状态来保存。

需要注意的是,两个数字的位数可能差异很大。这时候需要对两个字符串对齐,即补零操作。

并且要从数的末尾去进行相加,然后进位。

我们可以正着补零,然后从个位开始相加。代码如下:

int main(){
	string s1,s2;
	cin>>s1>>s2;
	//位数不同前置补0 
	while(s1.length()<s2.length()){
		s1.insert(0,"0");
	}
	while(s2.length()<s1.length()){
		s2.insert(0,"0");
	}
	int flag = 0;
	for(int i=s1.length()-1;i>=0;i--){
		int temp = s1[i]-'0'+s2[i]-'0'+flag;
		if(temp>9){
			flag = 1;
			temp = temp%10;
			s1[i] = temp + '0';
		}
		else{
			s1[i] = temp + '0';
			flag = 0;
		}
	} 
	if(flag){
		s1.insert(0,"1");
	}
	cout<<s1<<endl;
    return 0;
}

也可以先逆序相加。

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main(){
	string c;
	string s1,s2;
	cin>>s1>>s2;
	reverse(s1.begin(),s1.end());
	reverse(s2.begin(),s2.end());
	int flag = 0;
	int i;
	for(i=0;i<s1.length()||i<s2.length();i++){
		int tempa,tempb;
		if(i<s1.length()){
			tempa = s1[i]-'0';
		}
		else{
			tempa = 0;
		}
		if(i<s2.length()){
			tempb = s2[i]-'0';
		}
		else{
			tempb = 0;
		}
		int tempsum = tempa+tempb+flag;
		if(tempsum>9){
			flag = 1;
			tempsum%=10;
			c += tempsum+'0';
		}
		else{
			c += tempsum+'0';
			flag = 0;
		}
	}
	if(flag){
		c += "1"; 
	}
	reverse(c.begin(),c.end());
	cout<<c<<endl;
	return 0;
}

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值