题目:实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。

需要注意的地方:
1)输入的指数小于1即是零和负数的情况;
2)指数是负数时需要取倒数,当底数是0时的情况;
3)0的0次方无论输出0或1都可以接受;
4)为了区分是出错的时候返回的0,还是底数为0的时候正常运行返回0,我们需要定义了一个全局变量g_InvalidInput;
5)判断两个小数是否相等,只能判断它们之差的绝对值是不是在一个很小的范围内。如果两个数相差很小,就可以认为它们相等;
6)有个快捷的公式a的n次方={a的n/2次方 * a的n/2次方  当n为偶数时;  a的(n-1)/2次方 * a的(n-1)/2次方 * a n为奇数};
7)用右移运算符替代了除以2,用位与运算符代替了求余运算符(%)来判断一个数是奇数还是偶数。
 
测试用例:
把底数和指数分别设为正数、负数和零。
 
代码实现:
package com.yyq;

/**
* Created by Administrator on 2015/9/11.
*/
public class Power {
public static boolean g_InvalidInput = false;
public static double Power(double base, int exponent){
g_InvalidInput = false;
if(equal(base,0.0) && exponent < 0){
g_InvalidInput = true;
return 0.0;
}
int absExponent = exponent;
if (exponent < 0){
absExponent = -1 * exponent;
}
double result = PowerWithUnsignedExponent(base, absExponent);
if (exponent < 0){
result = 1.0 / result;
}
return result;
}
public static double PowerWithUnsignedExponent(double base, int exponent){
if (exponent == 0)
return 1;
if (exponent == 1)
return base;
double result = PowerWithUnsignedExponent(base, exponent >> 1);
result *= result;
if((exponent & 0x1)==1){
result = result * base;
}
return result;
}
public static boolean equal(double num1, double num2){
if ((num1 - num2 > -0.0000001) && (num1 -num2 < 0.0000001))
return true;
else
return false;
} // ====================测试代码====================
public static void Test(double base, int exponent, double expectedResult, boolean expectedFlag)
{
double result = Power(base, exponent);
if((result - expectedResult) < 0.00000001 && (result - expectedResult) > -0.00000001
&& g_InvalidInput == expectedFlag)
System.out.println("Test passed.");
else
System.out.println("Test failed.");
System.out.println();
} public static void main(String[] args){ // 底数、指数都为正数
System.out.println("Test1 begins.");
Test(2, 3, 8, false); // 底数为负数、指数为正数
System.out.println("Test2 begins.");
Test(-2, 3, -8, false); // 指数为负数
System.out.println("Test3 begins.");
Test(2, -3, 0.125, false); // 指数为0
System.out.println("Test4 begins.");
Test(2, 0, 1, false); // 底数、指数都为0
System.out.println("Test5 begins.");
Test(0, 0, 1, false); // 底数为0、指数为正数
System.out.println("Test6 begins.");
Test(0, 4, 0, false); // 底数为0、指数为负数
System.out.println("Test7 begins.");
Test(0, -4, 0, true); }
}
 
输出结果:
Test1 begins.
Test passed.
 
Test2 begins.
Test passed.
 
Test3 begins.
Test passed.
 
Test4 begins.
Test passed.
 
Test5 begins.
Test passed.
 
Test6 begins.
Test passed.
 
Test7 begins.
Test passed.

P90、面试题11:数值的整数次方的更多相关文章

  1. 剑指offer编程题Java实现——面试题11数值的整数次方

    题目: 实现函数double power(double base,int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题. 解题思路:最一般的方法实现数值 ...

  2. 剑指Offer:面试题11——数值的整数次方(java实现)

    题目描述: 实现函数double Power(double base, int exponent),求base的exponent次方,不得使用库函数,同时不需要考虑大数问题 思路:本题的重点考察内容是 ...

  3. 剑指offer_面试题11 数值的整数次方_考察代码的完整性

    测试通过代码: package t0825; public class Power { public static void main(String[] args){ System.out.print ...

  4. 剑指offer-面试题11.数值的整数次方

    题目:实现函数double Power(double base,int exponent),求base的 exponent次方.不得使用库函数,同时不需要考虑大数的问题. 这道题看似很简单: 然而需要 ...

  5. 《剑指offer》面试题11 数值的整数次方 Java版

    书中方法:这道题要注意底数为0的情况.double类型的相等判断.乘方的递归算法. public double power(double base, int exponent){ //指数为0 if( ...

  6. 【剑指offer】面试题 16. 数值的整数次方

    面试题 16. 数值的整数次方 题目描述 题目:给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 解答过程 下面的讨论中 x 代表 bas ...

  7. 《剑指offer》面试题16. 数值的整数次方

    问题描述 实现函数double Power(double base, int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题. 示例 1: 输入: 2.0 ...

  8. 《剑指offer》第十六题(数值的整数次方)

    // 面试题:数值的整数次方 // 题目:实现函数double Power(double base, int exponent),求base的exponent // 次方.不得使用库函数,同时不需要考 ...

  9. 《剑指offer》面试题11: 数值的整数次方

    面试题11: 数值的整数次方 剑指offer面试题11,题目如下 实现函数double power(double base,int exponent),求base的exponent次方, 不得使用库 ...

  10. 剑指offer——面试题16:数值的整数次方

    // 面试题16:数值的整数次方 // 题目:实现函数double Power(double base, int exponent),求base的exponent // 次方.不得使用库函数,同时不需 ...

随机推荐

  1. Visual Studio通过Web Deploy发布网站报错:An error occurred when the request was processed on the remote computer.

    这个问题很奇怪,不管我怎么重启服务器和自己的开发机,都没有用. 在网上找了很多资料,有说可以尝试去读Windows的错误日志,然后通过日志找原因…(详见Stackoverflow:http://sta ...

  2. SAP第一轮面试之英语群面

    很高兴通过了SAP的笔试,昨天进行了一轮面试.SAP一轮面试是英语群面(无领导小组讨论) 面试提前大约五天的样子通知面试时间地点,一般是在公司,要求正装.这些都会在HR联系你时通知的,所以不再啰嗦. ...

  3. Mysql slave 同步错误解决

    涉及知识点 mysql 主从同步 ,参考: MySQL数据库设置主从同步 mysqlbin log查看, 参考:MySQL的binlog日志 解决slave报错, 参考: Backup stopped ...

  4. dom4j api 详解--XPath 节点详解

    dom4j api 详解 http://871421448.iteye.com/blog/1546955 XPath 节点 http://www.w3school.com.cn/xpath/xpath ...

  5. 发送邮件(遵循smtp协议即简单的邮件发送协议)

    HandleSendEmail.aspx逻辑 protected void Page_Load(object sender,EventArgs e) { foreach(var item in Req ...

  6. nginx 配置文件

    #基于ip设置 server{ listen 80; server_name 192.168.116.129; location /{ root /usr/etc/ngin/html/ip; inde ...

  7. mac 上的版本控制工具SmartSVN9.0.4(破解版)

    附带上破解版安装说明: 1.在MAC上选中SmartSVN.dmg,右键->打开2.双击syntevo_keygen.jar 如果没有安装java会自动提示安装的3.输入Name Email(随 ...

  8. Java 多线程 锁 存款 取款

    http://jameswxx.iteye.com/blog/806968 最近想将java基础的一些东西都整理整理,写下来,这是对知识的总结,也是一种乐趣.已经拟好了提纲,大概分为这几个主题: ja ...

  9. ubuntu server版连接vpn服务器

    命令行的方法: 1.要下载pptp的客户端    sudo apt-get install pptp-linux 2.创建连接     sudo pptpsetup –create vpn001 –s ...

  10. 1009. Product of Polynomials (25)

    #include <stdio.h> struct MyStruct { int exp; double coe; }; int main() { int k1,k2,i,j; MyStr ...