面临的挑战是找到一个数字,该数字的单个数字乘以连续增加的幂并相加,等于初始数字。
例如:取89,将其分为8和9,然后8 ^ 1 + 9 ^ 2 = 89
1,2,3,4,,,,,,,,,,,,,,,,,,,NO
1,4,7,8,9,10,11,13,,,,,,,,NO
1,2,,,,,,,,,,,,,,,,,,,,,,,NO
1,1,2,4,5,6,7,8,9,10,11,12NO
abc,def,ghi,jkl,,,,,,,,,,,NO
a,b,,,,,,,,,,,,,,,,,,,,,,,NO
使用1和100(范围)的输入,输出应该是[1、2、3、4、5、6、7、8、9、89],但是我得到了所有数字[1、2 ... 100]。
我是最近才开始学习Java的,似乎无法在代码中找到问题。任何提示将不胜感激。
答案 0 :(得分:6)
您可以使用以下内容:
static List<Integer> sumDigPow(int a, int b) {
List<Integer> eureka = new ArrayList<Integer>(0);
String num;
int sum = 0, multi;
for (int i = a; i <= b; i++) {
num = String.valueOf(i);
for (int j = 0; j < num.length(); j++) {
multi = (int) Math.pow(Character.getNumericValue(num.charAt(j)), j + 1);
sum += multi;
}
if (sum == i) {
eureka.add(i);
}
sum = 0;
}
return eureka;
}
说明:
num
的每个字符。digits
数组列表,您只需使用char的数字值即可。答案 1 :(得分:4)
问题出在那几行:
num = String.valueOf(i);
digits.add(num);
您没有将数字分成数字。您只是将您的整数放入digits
列表中。看这段代码:
static List<Integer> sumDigPow(int a, int b) {
List<Integer> eureka = new ArrayList<Integer>();
List<String> digits;
String num;
int sum = 0, multi;
for (int i = a; i <= b; i++) {
num = String.valueOf(i);
digits = Arrays.asList(num.split(""));
for (int j = 0; j < digits.size(); j++) {
multi = (int) Math.pow(Integer.parseInt(digits.get(j)), j + 1);
sum += multi;
}
if (sum == i) eureka.add(i);
sum = 0;
}
return eureka;
}
我只是使用Arrays.asList(num.split(""))
将您的字符串号拆分为数字。它为a=1
,b=100
输出列表:
1
2
3
4
5
6
7
8
9
89
答案 2 :(得分:4)
使用char[]
将数字分成一个字符数组(只是将整个数字作为单个字符串添加到列表中,而不是单个数字):< / p>
...
char[] digits;
...
digits = String.valueOf(i).toCharArray();
然后,如果您从每个'0'
位中减去char
,则会自动获得该位的实际int
值,而不必在String上调用Integer.parseInt
方法,或者任何其他解析方法:
(int)Math.pow(digits[j] - '0', j + 1);
完整代码如下:
static List<Integer> sumDigPow(int a, int b) {
List<Integer> eureka = new ArrayList<Integer>();
int sum = 0;
char[] digits;
for (int i = a; i <= b; i++) {
digits = String.valueOf(i).toCharArray();
for (int j = 0; j < num.length(); j++)
sum += (int)Math.pow(digits[j] - '0', j + 1);
if (sum == i) eureka.add(i);
sum = 0;
}
return eureka;
}