数值的整数次方
来源:互联网 发布:fastcopy的软件 编辑:程序博客网 时间:2024/05/16 14:13
数值的整数次方(Java实现,与自带的幂函数进行了比较,结果完全一样)
自己编写一个求幂的函数,但是不允许调用系统的幂函数。
注:底数类型可以为double,指数类型只能为整数。
分析:不仅需要考虑底数的符号,以及底数和指数分别为正,零,负数的情况,剑指offer中的解答好像是有漏洞的,具体在代码中说明了。
代码如下:
package problem1;import java.util.Scanner;/** * @author Hutongling * */public class 数值的整数次方 { static double power1(double base, int exp) { if (base - 0.0000000000000001 == 1 && base + 0.0000000000000001 == 1 || exp == 0)// 当base=1的时候值为1 return 1; else if (base == 0) // 当base=0的时候值为0 return 0; else if (base - 0.0000000000000001 == -1 && base + 0.0000000000000001 == -1)// 当base=-1的时候值为(-1)^exp return exp % 2 == 0 ? 1 : -1; else { if (base > 0) { if (exp > 0) return power1(base, exp - 1) * base; else if (exp < 0) return 1 / (power1(base, -(exp + 1)) * base); } else { if (exp > 0) return power1(base, exp - 1) * base; else if (exp < 0) return 1 / power1(base, -exp); } } return 0; } // 这个只能计算指数是无符号数的情况,即exp>=0的时候才能用这个,这种方法是带有缺陷的, // 上面的方法power1(base,exp)也带有缺陷,但是在main()中已经解决了,在base==0&& // exp<=0的时候,其结果为“Infinity” static double power2(double base, int exp) { if (exp == 0) return 1; else if (exp == 1) return base; double result = power2(base, exp >> 1); result *= result; if ((exp & 1) == 1) result *= base; return result; } public static double Power(double base, int exponent) { if(base==0) return 0; else if(exponent==0) return 1; else if(exponent==1) return base; else if(base!=0 && exponent>0) return base*Power(base,exponent-1); else if(base!=0 && exponent<0) return 1/(base*Power(base,-exponent-1)); return 0.0; } public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNext()) { double base = in.nextDouble(); int exp = in.nextInt(); if (base == 0 && exp < 0) System.out.println("Infinity"); else System.out.println(power1(base, exp)); // System.out.println(power2(base,exp)); if (base == 0 && exp < 0) System.out.println("Infinity"); else System.out.println(Power(base, exp)); System.out.println(Math.pow(base, exp)); } }}
1 0
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- JavaScript中的标签语句用法分析
- 洛谷 P1462 通往奥格瑞玛的道路
- PHP字符串之单引号和双引号的区别
- Linux 创建线程
- 再会 树剖
- 数值的整数次方
- 洛谷 P1270 “访问”美术馆
- 洛谷 P1198 [JSOI2008]最大数
- 后缀数组 救命版
- 使用Word2016发布CSDN博客
- HDU 1054 Strategic Game
- POJ 3041 Asteroids
- HDU 1151 Air Raid
- RMQ 算法 学习整理