你的數學有很多問題,主要是循環分隔符,例如for(int j = 1; j < n; j++)
看起來有嫌疑,特別是當你有Math.pow(number%10,n)
。
這似乎woprk - 我也預先計算了所有的數字權力來精簡。
private static final int MinDigits = 4;
private static final int MaxDigits = 6;
// Pre-calculate powers of digits.
static final int[][] powers = new int[MaxDigits + 1][10];
static {
for (int d = MinDigits; d <= MaxDigits; d++) {
powers[d] = powers(d);
}
}
/**
* All digits raised to that power.
*/
private static int[] powers(int n) {
int[] powers = new int[10];
for (int d = 0; d < powers.length; d++) {
powers[d] = (int) Math.pow(d, n);
}
return powers;
}
private int sumOfPowersOfDigits(int x, int n) {
int sum = 0;
for (int i = 0; i < n; i++) {
sum += powers[n][x % 10];
x /= 10;
}
return sum;
}
private int sumOfMatchingPowersOfDigits(int n) {
int sum = 0;
// Start at 1000... and work up to 10000....
for (int x = (int) Math.pow(10, n - 1); x < (int) Math.pow(10, n); x++) {
// Work it out.
int sumOfPowersOfDigits = sumOfPowersOfDigits(x, n);
if (sumOfPowersOfDigits == x) {
// Found one!
System.out.println("Found " + x);
sum += sumOfPowersOfDigits;
}
}
return sum;
}
public void test() {
for (int i = MinDigits; i <= MaxDigits; i++) {
System.out.println("Sum of " + i + "th powers = " + sumOfMatchingPowersOfDigits(i));
}
}
是否失敗或超時? – Thomas
它失敗了第二個測試用例,但通過了剩下的3個測試用例 – SmashCode