求个函数 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的算法

解决方案 »

  1.   

    import java.util.*; public class Test4{ 
    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);
    }
    } }} 
      

  2.   


    好算法,不过下面的return语句时无用的,因为永远不会执行。
     if(num>p){
                fun(num,p*2);
                //System.out.println(p);
                return ;
            }
      

  3.   

    public class Test6 {
        
        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);
            }
        }
    }