A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Afridoce 高级黑马   /  2014-11-27 18:20  /  1691 人查看  /  16 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
第一题: 编程计算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));
        }
}
大家帮忙参考参考。。。

16 个回复

正序浏览
chun 中级黑马 2014-11-28 17:02:25
17#
考虑周全,学习学习!
回复 使用道具 举报
Evred 中级黑马 2014-11-28 16:17:21
16#
考虑周到啊
回复 使用道具 举报
思路够清晰啊!!挺好,在此受教了!!
回复 使用道具 举报
兄弟的思维我得好好研究下,,虽然有最简单的,不过我感觉你以后会是一位大神!!!!!!!!!
回复 使用道具 举报
考虑的很细
回复 使用道具 举报
记忆深处里 发表于 2014-11-27 20:35
public class Test3 {

        /**

嗯,此办法效率是最高的。。。
回复 使用道具 举报
很不错啊
回复 使用道具 举报
冥夜 中级黑马 2014-11-27 22:00:08
10#
额。。这么写可以体现你的思维缜密。不过实际中你判断是否可以更高效率的乘所花费的资源很可能已经足够直接用普通的乘法把结果运算出来了。。。
回复 使用道具 举报
我也是一句话完事0.0
回复 使用道具 举报
好厉害,又长见识了。。
回复 使用道具 举报
DamonZh 中级黑马 2014-11-27 21:10:03
7#
哈哈,体现出态度啦 。我今天也刚提交基础测试
回复 使用道具 举报
陈宁 来自手机 中级黑马 2014-11-27 21:02:37
地板
看来是我太肤浅了,受教了!
回复 使用道具 举报
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)
}

}
回复 使用道具 举报
学习了,考虑的很好,扩展思维
回复 使用道具 举报
考虑这么周祥,估计给我就一句话的事
回复 使用道具 举报
我终于知道我哪里抛了0.3分了...我过去这题就三句话还是一句话就答完了....
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马