好了,伙计们,我知道这不是欧拉项目第4题最优雅的解决方案,但我很自豪,因为我自己做到了……直到现在。
问题如下:http://projecteuler.net/index.php?section=problems& id = 4
public class Problem4 {
public void projectEuler4() {
int answer = 0;
for (int i = 1; i < 1000; i++) {
for (int j = 1; j < 1000; j++) {
if (i * j >= answer) {
String stringNum = "" + answer;
String firstHalf = "";
String secondHalf = "";
if (stringNum.length() % 2 == 0) {
for (int k = 0; k < stringNum.length() / 2; k++) {
firstHalf = firstHalf + ("" + stringNum.charAt(k));
}
for (int k = stringNum.length(); k < stringNum.length() / 2; k--) {
secondHalf = secondHalf + ("" + stringNum.charAt(k));
}
if (Integer.parseInt(firstHalf) == Integer.parseInt(secondHalf)) {
answer = i * j;
System.out.println(answer);
}
}
}
}
}
}
}
代码for(int k = stringNum.length(); k < stringNum.length()/2; k--)
你把比较搞混了(<而不是>),并且从stringNum.length()开始,而最后一个字符位于位置stringNum.length() - 1.而不是>
然而,你可以在代码方面改进很多东西:
- 不需要做
"abc"+(""+'d')
,直接做"abc"+'d'
- 不需要
Integer.parseInt("123") == Integer.parseInt("123")
,可以直接做"123".equals("123")
你的第二个循环
for(int k = stringNum.length(); k < stringNum.length()/2; k--)
你在倒计时,所以你的终止条件是错误的