Java 提升到数字的幂次方(迭代法)
我们编写了一个递归版本的Java 提升到数字的幂次方(迭代法),java,Java,我们编写了一个递归版本的power,它接受一个双精度x和一个整数n,并返回x^n。现在编写一个迭代方法来执行相同的计算 我如何计算数字的幂?我的代码一次又一次地打印结果,我不知道为什么 public class seventhree { public static void main(String[] args){ Scanner in= new Scanner(System.in); int x; int n; Syst
power
,它接受一个双精度x
和一个整数n
,并返回x^n
。现在编写一个迭代方法来执行相同的计算
我如何计算数字的幂?我的代码一次又一次地打印结果,我不知道为什么
public class seventhree {
public static void main(String[] args){
Scanner in= new Scanner(System.in);
int x;
int n;
System.out.print("Type in a base: ");
x= in.nextInt();
System.out.print("Type in an exponent: ");
n= in.nextInt();
while(n>=2){
System.out.println((x)*(n));
System.out.println();
}
}
}
由于
n
没有变化,因此必须减小n,直到它小于2,并且为了得到正确的结果,必须使用:
int rs = 1;
while (n > 0) {
rs *= x;
n--;
}
System.out.println(rs);
结果示例
Inputs Outputs
x = 6 36
n = 2
x = 2 8
n = 3
您可以通过使用
位操作
技术来实现这一点,该技术将以O(log(exponent))
的复杂度输出
其思想是将指数拆分为2
的power
整数之和。然后我们可以使用由base^1
,base^2
,base^4
产生的数字。。。。最后,我们可以把所有的,在指数的二进制表示法中有设定位的,相乘,得到最终的答案
long ans=1;
while(n > 0)
{
if((n&1)!=0) //Checking if the bit is set or not
ans*=x;
x*=x; //squaring the base
n=n>>1; //shifting exponent to check next bit
}
System.out.println(ans);
在您的代码中,您不会递减n
,因此它将以无限循环结束。因此,您可以对代码进行一些更改
long ans=1;
while(n>=1)
{
ans*=x;
n--;
}
System.out.println(ans);
由于n
在while循环中没有变化,因此条件始终为真。这里有一个无限循环。只要n
至少为2
,并且循环中的任何内容都不会改变n
,它就会继续运行,因此它永远不会结束。另外,你所写的和计算功率完全不同。也。没有原因代码应该是这样的。可能是重复的