題目
問題描述
任何一個正整數都可以用2進製表示,例如:137的2進製表示爲10001001。
將這種2進製表示寫成2的次冪的和的形式,令次冪高的排在前面,可得到如下表達式:137=2^7+2^3+2^0
現在約定冪次用括號來表示,即a^b表示爲a(b)
此時,137可表示爲:2(7)+2(3)+2(0)
進一步:7=2^2+2+2^0 (2^1用2表示)
3=2+2^0
所以最後137可表示爲:2(2(2)+2+2(0))+2(2+2(0))+2(0)
又如:1315=2^10+2^8+2^5+2+1
所以1315最後可表示爲:
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
輸入格式
正整數(1<=n<=20000)
輸出格式
符合約定的n的0,2表示(在表示中不能有空格)
樣例輸入
137
樣例輸出
2(2(2)+2+2(0))+2(2+2(0))+2(0)
樣例輸入
1315
樣例輸出
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
提示
用遞歸實現會比較簡單,可以一邊遞歸一邊輸出
源碼
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
cimi(n);
}
public static void cimi(int n){
int num=0;
int i=0,j;
int []a=new int[32];
while(n!=0){
j=n%2;
if(j==1)
a[num++]=i;
i++;
n/=2;
}
for(i=num-1;i>=0;i--){
if(a[i]==0)
System.out.print("2(0)");
else if(a[i]==1)
System.out.print("2");
else if(a[i]==2)
System.out.print("2(2)");
else if(a[i]>2){
System.out.print("2(");
cimi(a[i]);
System.out.print(")");
}
if(i!=0)
System.out.print("+");
}
}
}