求个函数 2的多少次方 例如
8 =2*2*2 如果输入 8
结果是 8 如果输入 7(2*2+2*1+2*0)
结果是
4
2
1
如果输入 16
结果是 16 如果输入 15
结果是 8
4
2
1 如果输入 10
结果是 8
2 要Java的算法
8 =2*2*2 如果输入 8
结果是 8 如果输入 7(2*2+2*1+2*0)
结果是
4
2
1
如果输入 16
结果是 16 如果输入 15
结果是 8
4
2
1 如果输入 10
结果是 8
2 要Java的算法
解决方案 »
- 凤凰网 的一道面试题 面试官说这是最基础的 但是我不会
- 怎么配置jdk的环境变量了
- protected的问题
- 初学JAVA,一个问题,请您帮忙。
- 如何用java应用程序打印Excel文档
- 怎样捕捉数字音频保存为文件?
- 高分求教:java/sql/Savepoint包的问题。
- java3d的问题,大家帮看看
- java d:\javalianxi\helloword 运行不了,而我把helloword.class放到 d:\jdk\bin的目录下却运行了。
- 类似于weicf01提的问题,大三学生,不知如何选择?
- 如何定义ArrayList<>数组?
- 有间隔的两个System.currentTimeMillis();方法为什么打印的结果总是一样?
public static void main(String[] args) {
fun(58,2);
}
static void fun(int num,int p){
if(num<3){
System.out.println(num);
return;
}
if(num>p){
fun(num,p*2);
//System.out.println(p);
return ;
}
if(num==p){
System.out.println(p);
return;
}
if(num<p){
if(num>p/2){
System.out.println(p/2);
fun(num-p/2,p/2);
}else{
fun(num,p/2);
}
} }}
好算法,不过下面的return语句时无用的,因为永远不会执行。
if(num>p){
fun(num,p*2);
//System.out.println(p);
return ;
}
public static void main(String[] args) {
put(7, 1);
}
public static void put(int num, int level) {
if(level > num) {
return;
}
put(num, level << 1);
if((num & level) > 0) {
System.out.println(num & level);
}
}
}