题目详述:
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
分析:
- 1.指数为负数的时候先取反不然最高位为1会多乘一次,导致结果不正确,最后面的得数取倒数就可以了。
- 2.写出指数的二进制表达,例如13表达为二进制1101。
- 3.举例:10^1101=10。
- 4.通过&1和>>1来逐位读取1101,为1时将该位代表的乘数累乘到最终结果。
代码实现:
package 牛客网;
import java.util.Scanner;
public class 数值的整数次方 {
public static double Power(double base, int exponent) {
double r = base;
int n = exponent;
if (exponent < 0) {
exponent = -exponent;
} else if (exponent == 0) {
return 1;
}
for (int i = 1; i < exponent; i++) {
r *= base;
}
return n < 0 ? 1 / r : r;
}
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("请入浮点数:");
Double base = s.nextDouble();
System.out.println("请输入整数:");
int exponet = s.nextInt();
System.out.println("base的exponent次方:");
System.out.println(Power(base,exponet));
}
}
输出示例: