package com.offer.java;
// 题目
// 实现函数double Power(double base, int exponent),求base的exponent次方。不得使用
//库函数,同时不需要考虑大数问题。
// 思路
// 这道题很容易实现,但需要注意以下陷阱:1) 0的负数次方不存在;2) 0的0次方没有数学意义;
//3)要考虑exponent为负数的情况。首先对exponent进行分类讨论,再对base是否为0进行讨论。
public class Offer16_Power {
public double power(double base, int exponent) {
double result;
if (exponent > 0) {
result = powerCore(base, exponent);
} else if (exponent < 0) {
if (base == 0) {
System.out.println("0的负数次方无意义!");
return 0;
}
result = 1 / powerCore(base, -exponent);
} else {
if(base == 0){
System.out.println("0的0次方无意义!");
}
return 1;
}
return result;
}
private double powerCore(double base, int exponent) {
if (exponent == 1)
return base;
double result = powerCore(base, exponent >> 1);
result *= result;
if ((exponent & 0x1) == 1)
result *= base;
return result;
}
public static void main(String[] args) {
Offer16_Power demo = new Offer16_Power();
System.out.print("0的6次方:");
System.out.println(demo.power(0, 6));
System.out.print("0的-6次方:");
System.out.println(demo.power(0, -6));
System.out.print("0的0次方:");
System.out.println(demo.power(0, 0));
System.out.print("2的6次方:");
System.out.println(demo.power(2, 6));
System.out.print("2的-3次方:");
System.out.println(demo.power(2, -3));
System.out.print("5的0次方:");
System.out.println(demo.power(5, 0));
System.out.print("-2的6次方:");
System.out.println(demo.power(-2, 6));
}
}
16_数值的整数次方
最新推荐文章于 2021-02-24 18:52:53 发布