Pro*_*usH 13 java arrays string algorithm arraylist
面临的挑战是找到一个数字,该数字的各个数字乘以连续增加的幂并相加,等于初始数字。
例如:取89,将其分为8和9,然后 8^1 + 9^2 = 89
static List<Integer> sumDigPow(int a, int b) {
List<Integer> eureka = new ArrayList<Integer>(0);
List<String> digits = new ArrayList<String>();
String num;
int sum = 0, multi;
for (int i=a; i<=b; i++) {
num = String.valueOf(i);
digits.add(num);
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;
digits.clear();
}
return eureka;
}
Run Code Online (Sandbox Code Playgroud)
输入1和100(范围)时,输出应为[1、2、3、4、5、6、7、8、9、89],但是我得到了所有数字[1, 2 ... 100]。
我是最近才开始学习Java的,似乎无法在代码中找到问题。任何提示将不胜感激。
您可以使用以下内容:
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;
}
Run Code Online (Sandbox Code Playgroud)
说明:
num。digitsarraylist,您只需使用char 的数值即可。使用char[]的号码拆分成数字作为字符数组(你是刚刚加入全数字作为一个字符串到列表中,而不是它的单个数字):
...
char[] digits;
...
digits = String.valueOf(i).toCharArray();
Run Code Online (Sandbox Code Playgroud)
然后,如果您'0'从每个char数字中减去,您将自动获得数字的实际int值,而不必调用Integer.parseIntString上的方法或任何其他解析方法:
(int)Math.pow(digits[j] - '0', j + 1);
Run Code Online (Sandbox Code Playgroud)
完整的代码如下所示:
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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
253 次 |
| 最近记录: |