思路:就是对137递归;然后对7,3,0递归;递归出口就是0,2
注意点:如果对1递归,输出的是"2",而不是"2(1)"
import java.math.BigInteger;
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int n = sc.nextInt();
System.out.println(getNumber(n + ""));
}
}
public static String getNumber(String str){
//递归出口
if(str.equals("0"))
return "0";
if(str.equals("2"))
return "2";
//将数转化为二进制数
BigInteger bigInteger = new BigInteger(str, 10);
str = bigInteger.toString(2);
//找二进制数的对应数:7,3,0(又如7转化为二进制数的对应数为:2,1,0)
int j = 0;
String result = "";//结果
for(int i = str.length() - 1; i >= 0; i--){//i代表7,3,0
if(str.charAt(j) == '1'){
if(str.length() - 2 == j) {//如果对应数为是1,输出"+2",而不是"+2(1)"
result = result + "+2";
j++;
}
else {
result = result + "+2(" + getNumber(i + "") + ")";
j++;
}
}
else
j++;
}
result = result.substring(1, result.length());//去掉多的那个"+"号
return result;
}
}
京公网安备 11010502036488号