英文:
Finding power of a number giving irrelevant answer. Can anyone give me the reason?
问题
使用Java计算一个数的幂。
如果输入为5和9,它会产生无关的答案。
import java.util.*;
import java.io.*;
class Solution {
public static void main(String args[]) {
// 在这里编写代码
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
int n = sc.nextInt();
System.out.println((n == 0) ? 1 : findPower(x, n));
}
static int findPower(int x, int n) {
for (int i = 1; i <= n; i++) {
x *= x;
}
return x;
}
}
英文:
Finding the power of a number using java.
if the input takes 5 and 9 as input it produces irrelevant answer.
import java.util.* ;
import java.io.*;
class Solution {
public static void main(String args[]) {
// Write code here
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
int n = sc.nextInt();
System.out.println((n==0)?1:findPower(x,n));
}
static int findPower(int x,int n){
for(int i=1;i<=n;i++){
x*=x;
}
return x;
}
}
答案1
得分: 1
你是将输入的 n
次方,而不是将输入乘以 n
次。你可以在循环中从 1
开始计算结果,然后不断将其乘以 x
。
int res = 1;
for (int i = 0; i < n; i++) res *= x;
return res;
英文:
You are squaring the input n
times instead of multiplying the input n
times. You can start the result at 1
, then keep multiplying it by x
in the loop.
int res = 1;
for (int i = 0; i < n; i++) res *= x;
return res;
答案2
得分: 0
> 找到一个给出无关答案的幂次问题。有人能告诉我原因吗?
通过添加一个打印语句,您可以看到发生了什么。
int n = 9, x = 5;
for(int i=1;i<=n;i++){
System.out.printf("%12d = %12d * %12d%n", x*x, x, x);
x = x * x;
}
输出(因为您要求原因,整数溢出导致负值)。
25 = 5 * 5
625 = 25 * 25
390625 = 625 * 625
-2030932031 = 390625 * 390625
-2052264063 = -2030932031 * -2030932031
-1083564287 = -2052264063 * -2052264063
781532673 = -1083564287 * -1083564287
-1741784063 = 781532673 * 781532673
-59967487 = -1741784063 * -1741784063
您每次都将数字与自身相乘。只需将int result
值初始化为1
,然后使用result = result * x;
进行乘法。
您还可以使用流。
int n = 9, x = 5;
int result = IntStream.range(0,n).reduce(1, (a,b)->a*x);
System.out.println(result);
输出
1953125
英文:
> Finding power of a number giving irrelevant answer. Can anyone give me the reason?
By putting in a print statement you can see what is happening.
int n = 9, x = 5;
for(int i=1;i<=n;i++){
System.out.printf("%12d = %12d * %12d%n", x*x, x, x);
x = x * x;
}
prints (Since you asked for a reason, the ints are overflowing, resulting in negative values).
25 = 5 * 5
625 = 25 * 25
390625 = 625 * 625
-2030932031 = 390625 * 390625
-2052264063 = -2030932031 * -2030932031
-1083564287 = -2052264063 * -2052264063
781532673 = -1083564287 * -1083564287
-1741784063 = 781532673 * 781532673
-59967487 = -1741784063 * -1741784063
You are multiplying the number by itself each time. Just initialize an int result
value to 1
and multiply it using result = result * x;
You can also use streams.
int n = 9, x = 5;
int result = IntStream.range(0,n).reduce(1, (a,b)->a*x);
System.out.println(result);
prints
1953125
</details>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论