`

java-71-数值的整数次方.实现函数double Power(double base, int exponent),求base的exponent次方

 
阅读更多

public class Power {

	/**
	 *Q71-数值的整数次方
	 *实现函数double Power(double base, int exponent),求base的exponent次方。不需要考虑溢出。
	 */
	private static boolean InvalidInput=false;
	public static void main(String[] args) {
		double result=power(3,15);
		System.out.println(result);
	}

	public static double power(double base,int exponent){
		if(base==0.0){
			if(exponent==0){
				InvalidInput=true;
			}
			return 0.0;
		}
		double result=1;
		int unsignedExponent =exponent;
		if(exponent<0){
			unsignedExponent=-exponent;
		}
		result=powerWithUnsignedExponent(base,unsignedExponent);
		if(exponent<0){
			result=1/result;
		}
		return result;
	}
	/*
	 * in Java,integer is 32 bits
	 * we store 
	 * base^(2^0),base^(2^1),base^(2^2),...base^(2^31) or
	 * base^1,    base^2,    base^4,...    base^(2^31) 
	 * in 
	 * a[0],a[1],a[2],...a[31]
	 * obviously,a[i+1]=a[i]*a[i] (0<=i<=30)
	 * we calculate like this:
	 *  3^7=(3^1)*(3^2)*(3^4)=a[0]*a[1]*a[2]
	 */
	public static double powerWithUnsignedExponent(double base,int exponent){
		double result=1.0;
		int len=Integer.SIZE;//Integer.SIZE=32
		double[] a=new double[len];
		int count=numberOf1(exponent);
		double curPower=0.0;
		for(int i=0,j=0;i<len&&j<count;i++){
			if(i==0){
				curPower=base;
			}else{
				curPower=curPower*curPower;
			}
			if((exponent&(1<<i))!=0){//if exponent has '1' at i-th bit
				a[i]=curPower;
				count++;
			}
		}
		for(int i=0;i<len;i++){
			if(a[i]!=0){
				result*=a[i];
			}
		}
		return result;
	}
	/*
	 * a^n=a^(n/2)*a^(n/2)	(when a is even number)
	 * a^n=a^(n/2)*a^(n/2)*a (when a is odd number)
	 */
	public static double powerWithUnsignedExponent2(double base,int exponent){
		double result=1.0;
		if(exponent==0){
			return 1;
		}
		if(exponent==1){
			return base;
		}
		result=powerWithUnsignedExponent2(base,exponent/2)
				*powerWithUnsignedExponent2(base,exponent/2);
		if((exponent&(0x01))!=0){
			result*=base;
		}
		return result;
	}
	/*
	 * return how many '1' in x (binary)
	 * e.g. (15)D=(1111)B,then we get 4
	 */
	public static int numberOf1(int x){
		int count=0;
		while(x!=0){
			x&=x-1;
			count++;
		}
		return count;
	}
}

分享到:
评论

相关推荐

    js代码-200615-数值的整数次方

    总结起来,JavaScript提供了`Math.pow()`函数以及乘法操作符`*`两种方式来计算数值的整数次方。对于不同的需求,可以选择合适的方法。在实际编程中,需要注意指数的类型和数值范围,以确保计算的准确性和效率。

    剑指Offer(Python多种思路实现):数值的整数次方

    题:实现函数double Power(double base, int exponent),求base的exponent次方、不得使用库函数,同时不需要考虑大数问题。 解题思路一: # 一般方法 class SolutionOne: def __init__(self): self.gInvalidInput...

    剑指offer 题16——数值的整数次方

    题目: 实现函数double Power(double base,int exponent), 求base得exponent次方。不得使用库函数,同时不需要考虑大数问题 因为不需要考虑大数问题,所以看起来似乎很简单,只需要累加就好 double Power(double ...

    Jsp数值n次方的计算

    public double power(double base, int exponent) { if (exponent == 0) { return 1; } else if (exponent &gt; 0) { return base * power(base, exponent - 1); } else { // 如果n为负数,计算1除以a^n return 1...

    JAVA案例 第二篇:针对大数值取整数和小数、保留几位小数、特定位数的数值、自幂数.docx

    public double power(double base, int exponent) { if (exponent == 0) return 1; if (exponent ) return 1 / power(base, -exponent); if (exponent % 2 == 0) return power(base * base, exponent / 2); ...

    Exponent-2.21.3.tar.gz

    "Exponent-2.21.3.tar.gz"是一个特定版本的Expo Go模拟器的离线安装包,版本号为2.21.3。这个压缩包包含了运行Expo Go应用程序所需的各种组件和资源。 压缩包中的文件主要分为几类: 1. **bundle文件**: - `...

    最新 Expo Client - Exponent Android apk 安装包 2.14.0 2020.01.11

    在react native开发中使用的工具,由于谷歌play下载访问受限,特在此提供最新的expo Exponent 2.14.0 apk安装包,Expo SDK 版本 36.0.0, React Native 版本 0.61.4

    世界500强面试题.pdf

    1.4.2. 请修改 append 函数,利用这个函数实现............................................. 78 1.4.3. 有 n 个长为 m+1 的字符串 ................................................................ 82 1.4.4. n...

    python-leetcode面试题解之第372题超级次方.zip

    给定一个非负整数`base`和一个非负整数`exponent`,求`base`的`exponent`次方。你需要设计一个算法,使其时间复杂度尽可能低。在实际应用中,这样的问题可能涉及到大整数运算,因此我们需要关注算法的效率。 解题...

    Matlab时频分析工具箱及函数应用说明

    很实用的时频分析工具箱,包括短时傅里叶正反变换等,很好,很强大哦~~分享给大家,包括以下函数的源代码: % sigmerge - Add two signals with given energy ratio in dB. % % Choice of the Instantaneous ...

    编程求x的n次方-用C语言程序设计:求x的n次方的函数 .pdf

    `pow()`函数位于`&lt;math.h&gt;`头文件中,它的基本语法是`double pow(double base, double exponent)`,用于计算底数`base`的指数`exponent`次方,并返回一个`double`类型的浮点数结果。 在给定的示例代码中,我们看到...

    数值的整数次方1

    题目要求实现一个名为 `myPow` 的函数,计算给定的底数 `base` 的指数 `exponent` 次方。在这个问题中,我们不能使用任何库函数,并且不考虑大数运算的问题。给定的两个示例分别展示了如何处理正指数和非整数的情况...

    用递归求次方

    int power(int base, int exponent) { if (exponent == 0) return 1; // 基本情况 return base * power(base, exponent - 1); // 递归情况 } int main() { int a, b; printf("请输入基数和指数:"); scanf("%d...

    (完整word版)c程序设计(第四版)谭浩强-课后答案(完整版).pdf.doc

    `pow(base, exponent)`函数返回base的exponent次幂。 5. **复利计算:** - 示例展示了如何计算不同储蓄策略下的本息总和。通过累乘和`pow`函数,模拟了五年期、两年后再三年期、三年后再两年期以及连续五年每年...

    java 求n的幂数与倍数

    public static int power(int base, int exponent) { int result = 1; for (int i = 0; i &lt; exponent; i++) { result *= base; } return result; } public static void main(String[] args) { int base = ...

    高精度幂次方计算 C++实现

    大整数的成员函数实现 ... }; BigInteger fastPow(BigInteger a, int b) { BigInteger res(1); while (b &gt; 0) { if (b % 2 == 1) { res *= a; } a *= a; b /= 2; } return res; } int main() { // 读取...

    Java实用经验总结--日期、数字篇

    - 对于数学运算,`java.lang.Math` 类提供了各种数学函数,如 `Math.pow(double base, double exponent)` 用于计算幂,`Math.round(double a)` 进行四舍五入等。 - 当需要处理大整数或高精度浮点数时,可以使用 `...

    react native 开发工具, 最新Exponent-2.5.2.apk

    react native 开发工具, 最新Exponent-2.5.2.apk,Run your projects before you deploy. Open projects by scanning QR codes

    C语言-任务三1

    在C语言编程中,任务三1涉及到两个主要的函数实现:`power`和`equation`。`power`函数用于执行幂运算,而`equation`函数则用于解决一元二次方程。让我们深入探讨这两个函数的设计和实现。 首先,`power`函数接收两...

Global site tag (gtag.js) - Google Analytics