题目1095:2的幂次方 练习递归

题目描述:

    Every positive number can be presented by the exponential form.For example, 137 = 2^7 + 2^3 + 2^0。

    Let's present a^b by the form a(b).Then 137 is presented by 2(7)+2(3)+2(0). Since 7 = 2^2 + 2 + 2^0 and 3 = 2 + 2^0 , 137 is finally presented by 2(2(2)+2 +2(0))+2(2+2(0))+2(0). 
 
    Given a positive number n,your task is to present n with the exponential form which only contains the digits 0 and 2.

输入:

    For each case, the input file contains a positive integer n (n<=20000).

输出:

    For each case, you should output the exponential form of n an a single line.Note that,there should not be any additional white spaces in the line.

样例输入:
1315
样例输出:
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)

package 上海交大;

import java.util.Scanner;

public class 幂次方1095 {
static int n;
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
while (s.hasNextInt()) {
n = s.nextInt();
System.out.println(f(n));
}
}
static String f(int n) {
StringBuffer sb = new StringBuffer();
if (n < 8) {
switch(n){
case 0: return "0";
case 1: return "";
case 2: return "2";
case 3: return "2+2(0)";
case 4: return "2(2)";
case 5: return "2(2)+2(0)";
case 6: return "2(2)+2";
case 7: return "2(2)+2+2(0)";
}
}else{
String temp = Integer.toBinaryString(n);
int len = temp.length();
for(int i=0; i<len; i++){
if(temp.charAt(i) == '1'){
if(i!=0)
sb.append("+");
sb.append("2(");
sb.append(f(len-i-1));
sb.append(")");
}
}
}
return sb.toString().replaceAll("\\(\\)", "");
}
}


原文地址:https://www.cnblogs.com/love533/p/2433528.html