题目
任何一个正整数都可以用2进制表示,例如:137的2进制表示为10001001。
将这种2进制表示写成2的次幂的和的形式,令次幂高的排在前面,可得到如下表达式:137=27+23+2^0
现在约定幂次用括号来表示,即a^b表示为a(b)
此时,137可表示为:2(7)+2(3)+2(0)
进一步:7=22+2+20 (2^1用2表示)
3=2+2^0
所以最后137可表示为:2(2(2)+2+2(0))+2(2+2(0))+2(0)
又如:1315=210+28+2^5+2+1
所以1315最后可表示为:
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
思路:
转换成二进制,递归调用
package bule_cup;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
int n = in.nextInt();
fun(n);
}
public static void fun(int n)
{
int a=0;
String s = Integer.toBinaryString(n);
int[] A = new int[s.length()];
for(int i=0;i<s.length();i++)
{
if(s.charAt(i)=='1')
{
A[a]=s.length()-(i+1);
a++;
}
}
// for(int i=0;i<A.length;i++)
// {
// System.out.print(A[i]);
// }
for(int i=0;i<a;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(");
fun(A[i]); //递归
System.out.print(")");
}
if(i!=a-1)
{
System.out.print("+");
}
}
}
}