题目描述
每个正数都可以用指数形式表示。
例如,137=27+23+20。
让我们用 a(b) 来表示 ab。
那么 137 可以表示为 2(7)+2(3)+2(0)。
因为 7=22+2+20,3=2+20,所以 137 最终可以表示为 2(2(2)+2+2(0))+2(2+2(0))+2(0)。
给定一个正数 n,请你将 n 表示为只包含 0 和 2 的指数形式。
输入样例:
1315
输出样例:
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
问题分析:很明显,这是一道递归实现的题。思路是首先将原十进制转化为二进制,然后将其保留在一个数组中,然后对于数组中的每一个项,输出2()的形式,括号内填的是指数,然后再将指数递归地表示
//重铸java荣光,我辈义不容辞!
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();
fun(n);
System.out.println();
}
}
static void fun(int x)
{
int[] a=new int[32];
int i = 0, cnt = 0;
//1.将十进制转换为二进制
//朴素版转化
while(x != 0)
{
int m = x%2;
if(m == 1)
{
a[cnt] = i; cnt++;
}
x /= 2; i++;
}
//2.输出
for(i = cnt-1; i >= 0; i--)
{
//幂为0时
if(a[i] == 0)
System.out.printf("2(0)");
//幂为1时
else if(a[i] == 1)
System.out.printf("2");
//幂为2时
else if(a[i] == 2)
System.out.printf("2(2)");
//幂大于2时,需要递归到下一层
else
{
System.out.printf("2(");
fun(a[i]);
System.out.printf(")");
}
if(i != 0)
System.out.printf("+");
}
}
}
很厉害!