题目要求
分析
我们分析一下x & 1
的作用:
以八位二进制为例:
1 → 00000001
&是按位析取,所以,我们分析高位是0还是1,结果都是1,所以只看低位。
低位如果是1,即奇数,则结果为00000001,即1,即非0;
低位如果是0,即偶数,则结果为00000000,即0。
所以,得到结论是x & 1
等价于x % 2
,但速度更快一些。
再解读一下x >>= 1
的作用:
>> 1
指右移1位,由于是正数,所以高位必然补0,相当于x /= 2
,即自除2。
本来是按照String写的,后来IJ建议我改成StringBuilder,然后就成了这个亚子,我也很苦涩啊~~
AC代码(Java语言描述)
import java.util.Scanner;
public class Main {
private static String run(int x){
StringBuilder s = new StringBuilder();
if(x == 0) {
return "0";
}
int i = 0;
do {
if((x & 1) != 0) {
s.insert(0, ((i == 1) ? "2" : "2(" + run(i) + ")") + ("".equals(s.toString()) ? "" : "+"));
//拼接字符串,应题意,要把低次方接在后面
}
i++;
x >>= 1;
} while(x != 0);//每次向右移位
return s.toString();
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println(run(scanner.nextInt()));
scanner.close();
}
}