谁能告诉我哪里出了问题
到目前为止,我尝试了这些,我通过了 3 个测试用例,但在一个案例中失败了,我提供了我遇到的问题的链接 here这是链接,这是 hackerrank 网站中的一个问题,以提高编码技能
public class Solution {
public static void main(String[] args) {
int result = 0;
Scanner z = new Scanner(System.in);
int n = z.nextInt();
for (int i = 2; i < Math.pow(10,n)-1; i++) {
int sum = 0;
int number = i;
while (number > 0) {
int d = number % 10;
number /= 10;
int temp = d;
for(int j = 1; j < n; j++){
temp *= d;
}
sum += temp;
}
if (sum == i) {
result += i;
}
}
System.out.println(result);
}
}
最佳答案
您的算法假设可接受的解决方案中的位数小于或等于输入(幂),但这并不总是正确的。如果 n = 5,那么您会错过 194,979 的解,因为 194,979 > 10^5-1 因此,您必须增加正在测试的数字的上限。
我的数学技能让我很失败,因为我不知道确切的上限应该是多少,但这似乎有效(将 Math.pow(10, n) 更改为 Math.Pow(10, n+1)) :
for (int i = 2; i < Math.pow(10,n+1)-1; i++) {
关于java - 给定极限内的数字 N 次方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35554340/