(算法)⼆进制求和————<字符串—模拟>

1. 题⽬链接:67.⼆进制求和

2. 题⽬描述:

3. 解法(模拟⼗进制的⼤数相加的过程):

算法思路:

模拟⼗进制中我们列竖式计算两个数之和的过程。但是这⾥是⼆进制的求和,我们不是逢⼗进⼀,⽽ 是逢⼆进⼀。 

C++算法代码: 

class Solution 
{
public:
    string addBinary(string a, string b) 
    {
        string answer; // 答案
        //翻转两个字符串
        reverse(a.begin(),a.end());
        reverse(b.begin(),b.end());
        int cur1=0,cur2=0;
        int t=0;    //进位
        while(cur1<a.size()||cur2<b.size()||t)
        {
            if(cur1<a.size())
            {
                t+=a[cur1++]-'0';
            }
            if(cur2<b.size())
            {
                t+=b[cur2++]-'0';
            }
            answer+=to_string(t%2);
            t/=2;
        }
        //翻转答案
        reverse(answer.begin(),answer.end());
        return answer;
    }
};

Java算法代码:

class Solution
{
	public String addBinary(String a, String b)
	{
		StringBuffer ret = new StringBuffer();
		int cur1 = a.length() - 1, cur2 = b.length() - 1, t = 0;
		while (cur1 >= 0 || cur2 >= 0 || t != 0)
		{
			if (cur1 >= 0) t += a.charAt(cur1--) - '0';
			if (cur2 >= 0) t += b.charAt(cur2--) - '0';
			ret.append((char)('0' + (char)(t % 2)));
			t /= 2;
		}
		ret.reverse();
		return ret.toString();
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

课堂随笔

感谢支持~~~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值