思路:就是对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; } }