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
,它就会继续运行,因此它永远不会结束。另外,你所写的和计算功率完全不同。也。没有原因代码应该是这样的。可能是重复的