剑指 Offer II 002. 二进制加法

思路:

首先求出最短长度,让他们对应加,将结果push_back到一个vector数组中。

  • 如果他们长度相等,判断最后的进位是不是为1,如果为1则push_back进去,否则不push_back。
  • 如果长度不想等,将较长的那个字符串剩下的部分和进位相加,同样将结果push_back进去。最后同样也要判断进位是否为1需要push_back进去。

其实就是模拟真实的手写计算过程。就是进位的设置需要注意一下。

 code:

solotion.h

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

class Solution {
public:
    string addBinary(string a, string b) {
        int alen=a.length(), blen=b.length();
		int minlen = min(alen,blen);
		
		int step=0;
		vector<int> ans;
		cout<<"minlen = "<<minlen<<endl;
		for (int i=0; i<minlen; i++){
			int ad1=a[alen-1-i]-'0', ad2=b[blen-1-i]-'0';
			int tmpsum = ad1+ad2+step;
			if (tmpsum>=2){
				ans.push_back((tmpsum)%2);				
				step = (tmpsum)/2;
			}else{
				ans.push_back(tmpsum);
				step = 0;
			}					
		}
		cout<<"ans.size = "<<ans.size()<<endl;
		if (alen==minlen && blen!=minlen){
			// b开始
			cout<<"in b"<<endl; 
			int instep = step;
			for (int i=minlen; i<blen; i++){
				int ad1=b[blen-1-i]-'0', ad2=instep;
				int tmpsum = ad1+ad2;
				if (ad1+ad2>=2){
					ans.push_back((tmpsum)%2);				
					instep = (tmpsum)/2;
				}else{
					ans.push_back(tmpsum);
					instep = 0;
				}	
			}
            if (instep==1){
                ans.push_back(instep); 
            }			        
		} 
		else if (blen==minlen && alen!=minlen){
			// a开始
			cout<<"in a"<<endl;
			int instep = step;
			for (int i=minlen; i<alen; i++){
				int ad1=a[alen-1-i]-'0', ad2=instep;
				int tmpsum = ad1+ad2;
				cout<<"tmpsum = "<<tmpsum<<endl;
				if (ad1+ad2>=2){
					ans.push_back((tmpsum)%2);				
					instep = (tmpsum)/2;
				}else{
					ans.push_back(tmpsum);
					instep = 0;
				}	
			}
            if (instep==1)
			    ans.push_back(instep);  
		}
        else{
            // 长度相等
            if (step==1){
                ans.push_back(step);
            }
        }
		for (int num:ans){
			cout<<num<<" ";
		}
		cout<<endl;

        string ansstr = "";
		for (int i=ans.size()-1; i>=0; i--){
			char tmpchar = ans[i]+'0';
			ansstr +=tmpchar;
		}
		// cout<<ansstr;
        return ansstr;
    }
};

main.cpp

#include<iostream>
#include<string>
#include "solution.h"
using namespace std;

int main(){
    Solution s;
    string a = "1010", b = "11";

    string ans = s.addBinary(a,b);
    cout<<ans<<endl;
    return 0;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值