题目描述
任何一个正整数都可以用2的幂次方表示。例如:
137=27+23+20
同时约定方次用括号来表示,即ab 可表示为a(b)。
由此可知,137可表示为:
2(7)+2(3)+2(0)
进一步:7= 22+2+20 (21用2表示)
3=2+20
所以最后137可表示为:
2(2(2)+2+2(0))+2(2+2(0))+2(0)
又如:
1315=210 +28 +25 +2+1
所以1315最后可表示为:
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
输入
输入描述:
输入包含一个正整数N(N<=20000),为要求分解的整数。
输入样例:
输出
输出描述:
程序输出包含一行字符串,为符合约定的n的0,2表示(在表示中不能有空格)
输出样例:
解题思路
可以用递归的方法来解,最后当余数为1或者2时结束,1就为’2(0)’,2就为’2’,其余的依次除以2 就行了,注意还要记录除以2的次数,再依次分解为最简就行啦。
代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n=scanner.nextInt();
m(n);
}
public static void m(int n){
int value=0;
if(n==1){
System.out.print("2(0)");//递归结束条件1
return;
}
if(n==2){
System.out.print("2");//递归结束条件2
return;
}
for (int i = 0; i < 15; i++) {//判断2的次数
if(n>=Math.pow(2,i)&&n<Math.pow(2,i+1)){
value=i;
break;
}
}
if(value==0){
System.out.print("2(0)");
}
else if(value==1){
System.out.print("2");
}
else {
System.out.print("2(");
m(value);
System.out.print(")");
}
if((int)(n-Math.pow(2,value))!=0){
System.out.print("+");
m((int)(n-Math.pow(2,value)));
}
}
}```