任意数的整数次方

有如下公式:

因此我们求解a^n时,可以先求解r=a^(n/2)

比如求解r=3^5,先求解3^(5-1)/2=3^2=9,因此3^5=9×9×3=243

注:我们需判断a是否为零,n的正负情况

代码:

/**
 * Created by wuchao on 17-3-29.
 */
import java.util.*;
public class test {
    public static int array[] = {1,1,0,1,1,1,1};
    public static void main(String[] args) {
        System.out.println(power(2,-3));
    }
    public static double power(double base,int exponent){
        //首先判断base是否为0,但double不能直接和0比较
        if(base<0.0000001 && base>-0.0000001) return 0;
        if(exponent==0) return 1;
        int flag=1;//正负标志
        if(exponent<0) {
            flag=-1;
            exponent=-exponent;
        }
        double result = powerWithunsigned(base,exponent);
        if(flag>0) return result;
        return 1/result;
    }
    //exponent>0
    public static double powerWithunsigned(double base,int exponent){
        if(exponent==0) return 1;
        if(exponent==1) return base;
        double result = powerWithunsigned(base,exponent>>1);
        result = result*result;
        //如果exponent为奇数
        if((exponent&1)>0){
            result=result*base;
        }
        return result;
    }
}
时间: 2024-12-27 13:40:48

任意数的整数次方的相关文章

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次方.

[剑指offer] 浮点数的整数次方

题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 输入描述 base,exponent 输出描述 base的exponent次方 题目分析 首先要注意,指数正负和零的情况判别: ①任何数的0次方等于0 ②0不能做除数(也就是指数为负时,基数不能为0) 解法一 运行时间:27ms 占用内存:636k public class Solution { public double Power(double base, int exp

剑指offer:数值的整数次方

题目描述给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. class Solution: def Power(self, base, exponent): # 任何数的0次方都是1 if exponent == 0: return 1 # 0的任何次方(除了0的0次方)都为0 if base == 0: return 0 # 先记录指数符号 sign = exponent > 0 exponent = abs(exponent) re

剑指offer 13:数值的整数次方

题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 保证base和exponent不同时为0 问题分析 计算一个浮点数的整数次方,主要考察的是对输入数据的完整性的预估能力.针对此问题,输入数据可能存在以下情况: 1.底数不为0,指数都为整数 2.底数不为0,指数都为负数 3.底数为0,指数为负数(出现零除情况) 4.底数为0,指数为正数(给定特殊值0或1) 代码实现的逻辑并不复杂,主要是需要考虑到所有可能存在的输入情况,同时需

剑指Offer对答如流系列 - 数值的整数次方

面试题15:数值的整数次方 题目描述 实现函数double Power(double base, int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题. 问题分析 三思而后行,这道题如果没事实现考虑好,非常容易出错. 首先分析列举出所有的场景. base的值 可能为正数也可能为负数(包含整数.小数) exponent的值可能为正整数也可能为负整数 base的值的处理是比较简单的,对于exponent的处理就要多加考虑了. 当exponent的值为负

谭浩强 c程序设计 8.17用递归法将一个整数n转换成字符串。例如,输入486,应输出字符串&quot;486&quot;。n的位数不确定,可以是任意位数的整数。

8.17用递归法将一个整数n转换成字符串.例如,输入486,应输出字符串"486".n的位数不确定,可以是任意位数的整数. #include <stdio.h> char str1[20];int i=0;long n;int main(){        int longToStr(long n);    char *revstr(char *str, int len);    printf("请输入一个整数n:\n");    scanf("

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

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

输入一个浮点数,并输出该数的整数部分和小数部分

package javaapplication29; import java.util.Scanner;import java.util.StringTokenizer; /** * * @author qingzhu */public class JavaApplication29 { /** * @param args the command line arguments */ public static void main(String[] args) { String[] mess={"