- 题目描述:
-
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("\\(\\)", "");
}
}