黑马程序员技术交流社区

标题: 我的基础测试题第一题 [打印本页]

作者: Afridoce    时间: 2014-11-27 18:20
标题: 我的基础测试题第一题
/*
第一题: 编程计算3乘8等于几,什么方法效率更高?

   
       
        需求:编程计算3乘8等于几,什么方法效率更高

        思路:一般方法是定义变量,然后通过乘法运算符* 进行运算。
              如果进行位运算的话,效率比较高。
                  发现8是2的3次方,因此可以用位运算来计算3*8
                  但是位运算乘数必须是2的N次幂才能进行,因此要判断乘数是否为2的N次幂
                  一个数是否为2的N次幂也可以用<<位运算来判断,
                  用 x & (x-1)== 0,用右移运算符>>右移1位来获取幂的次数

        步骤:
                1,定义乘法运算函数
                2,判断是否能用效率更高的位运算进行乘法运算
                3,如果可以进行位运算则获取幂的次数
                4,否则用 * 运算符进行运算
                5,调用乘法运算函数
               
       
*/
class Test1
{
        public static void main(String[] args)
        {   
                //调用乘法方法
            chengfa(3,8);
        }

        //定义乘法方法
        public static void chengfa(int a,int b)  
        {
                //判断乘数是否是2的n次幂
                if(b > 0 && (b & (b-1)) == 0)   
                {
                        //定义参数x用来存储幂的次数
                        int x = 0;
                        int y = b;
                        //while循环右移1位的方式计算幂的次数
                        while(y-1>0)               
                        {
                                y>>=1;
                                x++;
                        }
                        //左移运算并打印结果
                        System.out.println(a+"*"+b+"="+(a<<x));
                }
                else
                        //乘法运算并打印结果
                        System.out.println(a+"*"+b+"="+(a*b));
        }
}
大家帮忙参考参考。。。
作者: 桃华月禅    时间: 2014-11-27 18:53
我终于知道我哪里抛了0.3分了...我过去这题就三句话还是一句话就答完了....
作者: 夏至落叶    时间: 2014-11-27 19:28
考虑这么周祥,估计给我就一句话的事
作者: 孟育俊    时间: 2014-11-27 20:00
学习了,考虑的很好,扩展思维
作者: 记忆深处里    时间: 2014-11-27 20:35
public class Test3 {

        /**
         *
         *
         *
         *
         * 编程计算3乘8等于几,什么方法效率更高?
         */
public static void main(String args[]){
  //采用移位运算输出结果
  System.out.println(3<<3);// 左移相当于乘. 左移一位相当于乘2(2^1);左移两位相当于乘4(2^2);左移三位相当于乘8(2^3)
}

}
作者: 陈宁    时间: 2014-11-27 21:02
看来是我太肤浅了,受教了!
作者: DamonZh    时间: 2014-11-27 21:10
哈哈,体现出态度啦 。我今天也刚提交基础测试
作者: xingkong123    时间: 2014-11-27 21:12
好厉害,又长见识了。。
作者: chen_32768    时间: 2014-11-27 21:34
我也是一句话完事0.0

作者: 冥夜    时间: 2014-11-27 22:00
额。。这么写可以体现你的思维缜密。不过实际中你判断是否可以更高效率的乘所花费的资源很可能已经足够直接用普通的乘法把结果运算出来了。。。
作者: RINGARES    时间: 2014-11-27 22:20
很不错啊
作者: scoto263    时间: 2014-11-27 22:23
记忆深处里 发表于 2014-11-27 20:35
public class Test3 {

        /**

嗯,此办法效率是最高的。。。
作者: 王小忠    时间: 2014-11-27 22:24
考虑的很细
作者: scoto263    时间: 2014-11-27 22:25
兄弟的思维我得好好研究下,,虽然有最简单的,不过我感觉你以后会是一位大神!!!!!!!!!
作者: 叫我小强    时间: 2014-11-28 13:52
思路够清晰啊!!挺好,在此受教了!!
作者: Evred    时间: 2014-11-28 16:17
考虑周到啊

作者: chun    时间: 2014-11-28 17:02
考虑周全,学习学习!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2