[算法]二进制求和——LeetCode.67

题目链接  一道日常签到题

看到这题,想起了当年蓝桥杯练习的某道进制题 :yi: 准备用Integer的自带方法秒它 :ku: ,不过还是有坑的

思路

给定两个二进制字符串,输出他们的二进制和,先转成int,然后求和,转回去,简单粗暴

其实也有想过直接两个字符串带权位运算,不过写起来好像麻烦很多。。。偷懒了

题解代码

带测试可直接运行


package com.leaf;

import java.math.BigInteger;

//转换成int相加即可

public class AddBinary {
	

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		System.out.println(addBinary("1010","1011"));
		
		
	}
	
	public static String addBinary(String a, String b) {
		//int val = 1;
		//int va = 0;
		BigInteger val = new BigInteger("1");
		BigInteger va = new BigInteger("0");
        for(int i=a.length()-1;i>=0;i--) {
        	if(a.charAt(i)=='1') {		//还是要注意字符串与字符的判等
        		//va += val;
        		va = va.add(val);
        	}
        	val = val.multiply(new BigInteger("2"));
        }
        
//        val = 1;
//        int vb = 0;
//        for(int i=b.length()-1;i>=0;i--) {
//        	if(b.charAt(i)=='1') {		
//        		vb += val;
//        	}
//        	val *= 2;
//        }
        val = new BigInteger("1");
		BigInteger vb = new BigInteger("0");
        for(int i=b.length()-1;i>=0;i--) {
        	if(b.charAt(i)=='1') {		
        		vb = vb.add(val);
        	}
        	val = val.multiply(new BigInteger("2"));
        }
        
		return va.add(vb).toString(2);
    }
	
	
	
}

 

 

注意

  1. 佛了,真就题均大数么 :pen: 逼得我用上大数类(代码中注释了的原代码)
  2. Java按位取值
  3. 字符串与字符判等之间的不同
  4. toString(int radix),radix表示输出字符串位radix进制数
点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注