题目链接 一道日常签到题
看到这题,想起了当年蓝桥杯练习的某道进制题 准备用Integer的自带方法秒它 ,不过还是有坑的
思路
给定两个二进制字符串,输出他们的二进制和,先转成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);
}
}
注意
- 佛了,真就题均大数么 逼得我用上大数类(代码中注释了的原代码)
- Java按位取值
- 字符串与字符判等之间的不同
- toString(int radix),radix表示输出字符串位radix进制数