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;
}
}
分享到:
相关推荐
总结起来,JavaScript提供了`Math.pow()`函数以及乘法操作符`*`两种方式来计算数值的整数次方。对于不同的需求,可以选择合适的方法。在实际编程中,需要注意指数的类型和数值范围,以确保计算的准确性和效率。
题:实现函数double Power(double base, int exponent),求base的exponent次方、不得使用库函数,同时不需要考虑大数问题。 解题思路一: # 一般方法 class SolutionOne: def __init__(self): self.gInvalidInput...
题目: 实现函数double Power(double base,int exponent), 求base得exponent次方。不得使用库函数,同时不需要考虑大数问题 因为不需要考虑大数问题,所以看起来似乎很简单,只需要累加就好 double Power(double ...
public double power(double base, int exponent) { if (exponent == 0) { return 1; } else if (exponent > 0) { return base * power(base, exponent - 1); } else { // 如果n为负数,计算1除以a^n return 1...
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"是一个特定版本的Expo Go模拟器的离线安装包,版本号为2.21.3。这个压缩包包含了运行Expo Go应用程序所需的各种组件和资源。 压缩包中的文件主要分为几类: 1. **bundle文件**: - `...
在react native开发中使用的工具,由于谷歌play下载访问受限,特在此提供最新的expo Exponent 2.14.0 apk安装包,Expo SDK 版本 36.0.0, React Native 版本 0.61.4
1.4.2. 请修改 append 函数,利用这个函数实现............................................. 78 1.4.3. 有 n 个长为 m+1 的字符串 ................................................................ 82 1.4.4. n...
给定一个非负整数`base`和一个非负整数`exponent`,求`base`的`exponent`次方。你需要设计一个算法,使其时间复杂度尽可能低。在实际应用中,这样的问题可能涉及到大整数运算,因此我们需要关注算法的效率。 解题...
很实用的时频分析工具箱,包括短时傅里叶正反变换等,很好,很强大哦~~分享给大家,包括以下函数的源代码: % sigmerge - Add two signals with given energy ratio in dB. % % Choice of the Instantaneous ...
`pow()`函数位于`<math.h>`头文件中,它的基本语法是`double pow(double base, double exponent)`,用于计算底数`base`的指数`exponent`次方,并返回一个`double`类型的浮点数结果。 在给定的示例代码中,我们看到...
题目要求实现一个名为 `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...
`pow(base, exponent)`函数返回base的exponent次幂。 5. **复利计算:** - 示例展示了如何计算不同储蓄策略下的本息总和。通过累乘和`pow`函数,模拟了五年期、两年后再三年期、三年后再两年期以及连续五年每年...
public static int power(int base, int exponent) { int result = 1; for (int i = 0; i < exponent; i++) { result *= base; } return result; } public static void main(String[] args) { int base = ...
大整数的成员函数实现 ... }; BigInteger fastPow(BigInteger a, int b) { BigInteger res(1); while (b > 0) { if (b % 2 == 1) { res *= a; } a *= a; b /= 2; } return res; } int main() { // 读取...
- 对于数学运算,`java.lang.Math` 类提供了各种数学函数,如 `Math.pow(double base, double exponent)` 用于计算幂,`Math.round(double a)` 进行四舍五入等。 - 当需要处理大整数或高精度浮点数时,可以使用 `...
react native 开发工具, 最新Exponent-2.5.2.apk,Run your projects before you deploy. Open projects by scanning QR codes
在C语言编程中,任务三1涉及到两个主要的函数实现:`power`和`equation`。`power`函数用于执行幂运算,而`equation`函数则用于解决一元二次方程。让我们深入探讨这两个函数的设计和实现。 首先,`power`函数接收两...