我正在做作业,我必须使用平方乘幂来做两件事。一个是得到乘法的次数,另一个是得到实际的结果。
下面是一些例子:
2
11
应该输出
2048
5
因为2^11 = 2(2((2)²)²)²
我在没有递归的情况下这样做,我得到了正确的结果,但是乘法的数量是错误的。如果我输入2^6
我得到3
乘法,那没关系,但如果我输入2^8
我得到4
乘法,这是错误的。
你能指出我在正确乘法方面做错了什么吗?
这是代码:
public static void main(String[] args) {
double x, result = 1;
int n, multiplications = 0;
DecimalFormat df = new DecimalFormat("#.00");
Scanner readLine = new Scanner(System.in);
x = readLine.nextDouble();
n = readLine.nextInt();
if (n == 1) {
multiplications++;
System.out.print(df.format(x) + "\n" + multiplications + "\n");
} else if (n == 2) {
x *= x;
multiplications++;
System.out.print(df.format(x) + "\n" + multiplications + "\n");
} else {
while (n > 0) {
if (n % 2 == 0) {
multiplications++;
} else {
multiplications++;
result *= x;
n--;
}
x *= x;
n /= 2;
}
System.out.print(df.format(result) + "\n" + multiplications + "\n");
}
}