Q11:数值的整数次方
2016-07-23 08:32
288 查看
2016-07-12
Q11:数值的整数次方
public
class Q11 {
/**
* 题目:数值的整数次方
* 题目说明:实现函数double Power(double base,
int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
* 解法一:采用简单的思路for循环实现。
* 解法二:考虑边界值和判断是否出错的情况。(补充:高效率方法)
*/
public
static void main(String[] args) {
Q11 test = new Q11();
System.out.println(test.Power1(2.0, 3));
System.out.println(test.Power2(2.0, 3));
}
//解法一
public
double Power1(double base,
int exponent){
double result=1.0;
for(int i=1; i<=exponent; i++){
result *= base;
}
return result;
}
//解法二
//定义一个全局变量g_InvalidInput来标识是否出错。当出错时标识为true,否则为false。
boolean
g_InvalidInput = false;
public
double Power2(double base,
int exponent){
g_InvalidInput =
false;
//判断是否合法,通过设置全局变量来观察
if(equal(base,0.0)&&exponent<0){
g_InvalidInput =
true;
return 0.0;
}
int absExponent;
if(exponent<0){
absExponent=-exponent;
}else {
absExponent=exponent;
}
//调用递归函数实现幂次方
double result = PowerExponent(base, absExponent);
if(exponent<0){
result=1.0/result;
}
return result;
}
//PowerExponent()的实现过程
public
double PowerExponent(double base,
int exponent){
double result = 1.0;
for(int i=1; i<=exponent; i++){
result *= base;
}
return result;
}
//定义函数判断两个数是否相等。
public
boolean equal(double num1,
double num2){
if((num1-num2>-0.0000001)&&(num1-num2<0.0000001)){
return
true;
}else {
return
false;
}
}
//补充:在上述两种方法中都是采用for循环来实现乘幂现象。这种方法的时间复杂度为O(n)级别。除了上述方法外,可以采用乘方方法来降级时间复杂度到O(logn)级别。
//例如:a^n=(a^n/2)*(a^n/2)
public
double PowerExponent2(double base,
int exponent){
if(exponent==0){
return 1;
}
if(exponent==1){
return base;
}
double result = PowerExponent2(base, exponent);
result *= result;
if((exponent & 0x1) == 1){
result *= base;
}
return result;
}
}
Q11:数值的整数次方
public
class Q11 {
/**
* 题目:数值的整数次方
* 题目说明:实现函数double Power(double base,
int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
* 解法一:采用简单的思路for循环实现。
* 解法二:考虑边界值和判断是否出错的情况。(补充:高效率方法)
*/
public
static void main(String[] args) {
Q11 test = new Q11();
System.out.println(test.Power1(2.0, 3));
System.out.println(test.Power2(2.0, 3));
}
//解法一
public
double Power1(double base,
int exponent){
double result=1.0;
for(int i=1; i<=exponent; i++){
result *= base;
}
return result;
}
//解法二
//定义一个全局变量g_InvalidInput来标识是否出错。当出错时标识为true,否则为false。
boolean
g_InvalidInput = false;
public
double Power2(double base,
int exponent){
g_InvalidInput =
false;
//判断是否合法,通过设置全局变量来观察
if(equal(base,0.0)&&exponent<0){
g_InvalidInput =
true;
return 0.0;
}
int absExponent;
if(exponent<0){
absExponent=-exponent;
}else {
absExponent=exponent;
}
//调用递归函数实现幂次方
double result = PowerExponent(base, absExponent);
if(exponent<0){
result=1.0/result;
}
return result;
}
//PowerExponent()的实现过程
public
double PowerExponent(double base,
int exponent){
double result = 1.0;
for(int i=1; i<=exponent; i++){
result *= base;
}
return result;
}
//定义函数判断两个数是否相等。
public
boolean equal(double num1,
double num2){
if((num1-num2>-0.0000001)&&(num1-num2<0.0000001)){
return
true;
}else {
return
false;
}
}
//补充:在上述两种方法中都是采用for循环来实现乘幂现象。这种方法的时间复杂度为O(n)级别。除了上述方法外,可以采用乘方方法来降级时间复杂度到O(logn)级别。
//例如:a^n=(a^n/2)*(a^n/2)
public
double PowerExponent2(double base,
int exponent){
if(exponent==0){
return 1;
}
if(exponent==1){
return base;
}
double result = PowerExponent2(base, exponent);
result *= result;
if((exponent & 0x1) == 1){
result *= base;
}
return result;
}
}
相关文章推荐
- 如何书写高质量的代码
- Android事件分发
- [李景山php]每天laravel-20160923|Hub.php
- nyist 737 石子合并(一)
- Q10:二进制中1的个数
- UICollectionViewCell的四种创建方法
- [李景山php]每天laravel-20160923|Hub.php
- MySQL使用INSERT插入多条记录
- Glide图片加载库的使用
- 多校联赛第二场 1011 Keep On Movin
- 【无私分享:ASP.NET CORE 项目实战(第二章)】添加EF上下文对象,添加接口、实现类以及无处不在的依赖注入(DI)
- kvm安装配置(一)
- 开源镜像站最新动态20150723
- 【无私分享:ASP.NET CORE 项目实战】目录索引
- Spark与Pandas中DataFrame的详细对比
- RPG游戏知识点
- Android学习笔记--margin和padding的区别
- NORFLASH和NANDFLASH启动
- 谈谈关于MVP模式中V-P交互问题
- 机器学习 Machine Learning(by Andrew Ng)----第五章 正则化(Regularization)