服务器之家

服务器之家 > 正文

java中幂指数值的运算代码解析

时间:2021-03-03 13:57     来源/作者:寻找现实扭曲力场

说到幂指数的运算我们就会用到Math.pow(doublea,doubleb),返回的结果是a的b次方。

在Java中,当我们计算2的n次方时,可以直接用Math.pow来计算。非常方便。

但是,已知一个幂的结果为M和幂的底数a,现在要求幂的指数n。Math中提供的有log(double)方法,但是只能传入一个参数,即M。那么问题来了,如何简单、方便、快捷的达到我们的要求呢?答案如下:

n=Math.log(M)/Math.log(a);

这个方法可以满足我们大多数幂指数的计算,但是每次访问的值和传入的值都是double,自己不想去转的话怎么办,我们有一种新的方案。

方案前提:幂指数的底数是2的倍数。

这里我们就用到了移位运算(移位运算是基于二进制来的,所以方案前提就是这个依据),如我们求2的3次方,我们可以用2<<(3-1)来计算出结果。

4的2次方,我们先要把4转化为2的2次方,再来2<<(4-1)来计算出结果。

下面这个方法实现的效果是我们传入一个2的倍数相加的两个数,比如12(是4+8),我们把它自动计算出[4,8]

再比如18,我们把它计算出[2,16]

再比如22,我们把它计算出[2,4,16]

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/**
   * 以2的次方开始的转换成整型数组,字符串数组
   * @param sum 传入派系的值,可以是一个派系的值,也可以是多个派系相加的值
   *      2^1 + 2^2 这种
   * 突然忘记移位操作也是一种指数幂的运算
   * @return
   */
private static int[] toUgroupArray(int sum){
    if(sum < 0){
        System.out.println("you have an eroor code");
    } else if(sum == 0) {
        System.out.println("you have no choise code");
    } else{
        String binaryCode = Integer.toBinaryString(sum);
        System.out.println("binary code:"+binaryCode);
        int index = binaryCode.length() -1;
        String str = "";
        for (int i=0;i<binaryCode.length();i++){
            if(binaryCode.charAt(i) == '1'){
                str = str + index +",";
            }
            index --;
        }
        str = str.substring(0, str.length()-1);
        System.out.println(str);
        String[] strArray = str.split(",");
        int[] result = new int[strArray.length];
        //也可以返回一个字符数组
        //String[] result2 = new String[strArray.length];
        for (int i=0;i<strArray.length;i++){
            //result[i] = (int)Math.pow(2, Double.parseDouble(strArray[i]));
            result[i] = 2 << (Integer.parseint(strArray[i])-1);
        }
        return result;
    }
    return null;
}

总结

以上就是本文关于java中幂指数值的运算代码解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

原文链接:http://blog.csdn.net/pearyangyang/article/details/48808089

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
Intellij idea2020永久破解,亲测可用!!!
Intellij idea2020永久破解,亲测可用!!! 2020-07-29
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
返回顶部