自己实现一个数的整数次方 11

注意输入的判断,多写几个if语句判断是否满足输入数据的条件

?
?

另外exp为负的时候,输入的base变为1.0/base而不是1/base

?
?

所以返回值要设置为double,base也要设为double

?
?

另外要自己定义equal,而不能用==,要去判断两个数的差的绝对值是否在一定范围内

?
?

package myPower11;

?
?

public class MyPower11 {

static boolean equal(double num1,double num2)

{

if((num1-num2>-0.0000001)&&num1-num2<0.0000001)

{

return true;

}

else

{

return false;

}

}

static double myPower(double base, int exp) throws Exception {

double result = 0;

if (equal(base,0.0) && exp < 0) {

throw new Exception("no sense");

}

if (equal(base,0.0) && exp >= 0) {

return 0;

}

if (base!=0&&exp>=0) {

result=powerCal(base, exp);

return result;

}

if (base != 0 && exp < 0) {

return powerCal(1.0 / base, -exp);

}

return result;

?
?

}

?
?

static double powerCal(double base, int exp) {

double result = 1;

if (base != 0 && exp >= 0) {

for (int i = 0; i < exp; i++) {

result *= base;

}

?
?

}

return result;

?
?

}

?
?

public static void main(String[] args) throws Exception {

// TODO Auto-generated method stub

System.out.println(myPower(2, -3));

}

?
?

}

?
?

时间: 2024-10-05 23:22:58

自己实现一个数的整数次方 11的相关文章

数值的整数次方——11

实现函数double Power(double base, int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题. 首先可以想到的是,如果exponent是个大于零的数,可用循环来进行相乘,而如果exponent是个复数,依然可以将base进行相乘,最后再取其倒数也就是用1去除以相乘结果.程序设计如下: #include <iostream> #include <math.h> using namespace std; double 

判断一个数是否时2的整数次方

题目描述: 给一个数字 N,判断是否是2的整数次方? 解题方向:可以根据二进制的特点,用消去一法直接得出结果. 消去一法:  N--1可以使N的最低位的1为0,所以最低位的1之后的每一位都是0,因此 N &(N--1)(核心)就可以消去最低为的1. 题解思路:由于2的整数次方二进制表示形式只有一个1,所以利用消去1法后,结果一定为0. 代码: //消去一法解是否是2的整数次方 public static boolean f(int N){ //输入的N不能为0 if((N & (N-1))

【剑指offer】数值的整数次方

转载请注明出处:http://blog.csdn.net/ns_code/article/details/25506085 剑指offer上的第十一题,九度OJ上测试通过. 题目描述: 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 输入: 输入可能包含多个测试样例.对于每个输入文件,第一行输入一个整数T,表示测试案例的数目,接下来的T行每行输入一个浮点数base和一个整数exponent,两个数中间用一个空格隔开. 输出: 对应每

笔试算法题(23):数值整数次方 &amp; 最大对称子串

出题:数值的整数次方(不考虑溢出),实现函数double Power(double base, int exponent): 分析: 解法1:最简单的方法是使用直接的乘法运算,但是注意处理几种特殊情况:exponent为负数,base为0: 解法2:将exponent分解成2的不同次方相加的表达式,通过重复平方来最大程度的减少乘法运算的次数. 当然,也可以递归实现,当n为偶数时,a^n=a^(n/2) * a^(n/2):当n为奇数时,a^n=a^((n-1)/2) * a^((n-1)/2)

c语言:判断一个整数是不是2的整数次方

判断一个整数是不是2的整数次方. 解:程序: #include<stdio.h> int count(int t) { int count=0; while (t) { count++; t=t&(t-1); } return count; } int main() { int num,ret=0; printf("请输入一个整数:"); scanf("%d", &num); ret = count(num); if (ret == 1)

11--数值的整数次方

/* 题目:数值的整数次方. 实现:double Power(double base, int exponet); 求base的exponet次方.不得使用库函数,同时不需要考虑大数问题. 解题思路: 注意两个问题: (1):计算机中的float和double是有偏差的,一般 1.0 != 1.0.所以如果想计算就要写 abs(a - b) < 0.000001 就可以. (2):要考虑边界条件:(a),底数是0或者1,次方是负数. 优化: 这里求a的b次方是可以优化的. 举例:10的20次方.

计算一个数的n次方

#include <iostream> #include <cmath> /// 数学函数必不可少. using namespace std; int main() { double a,x; /// a为底数,x为幂 while(cin>>a>>x) { cout<<pow(a,x)<<endl; /// 注意若求一个数的小数次方,则x一定要加小数点. } } 在定义a,x的类型时,最好定义为double型,以免发生错误.

剑指Offer-数值的整数次方

数值的整数次方 题目描述: ??给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 解题思路: ??注意判断输入的int类型的整数exponent是正数还是负数,0: 如果是正数,使用循环来让base自身乘exponent次,直接返回: 如果是负数,按照正数的方法得到结果result,然后返回1.0/result,.: 如果是0,直接返回1. 我的Java源代码: public class Solution { public doubl

数值的整数次方-剑指Offer

数值的整数次方 题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 思路 主要有几点需要注意 由于计算机表示小数(float和double)都有误差,不能直接用等号(==)判断两个小数是否相等.若两个小数的差的绝对值很小,比如小于0.0000001,就可以认为它们相等 注意考虑输入值得全面性,正负可能,而且0的负数次幂没意义. 代码 解法一: public class Solution { public double Powe