有人可以帮我解决Java中的Project Euler#4问题吗?

时间:2011-07-09 20:10:35

标签: java

好的,我知道这不是Project Euler第四个问题最优雅的解决方案,但我为此感到自豪,因为我自己做到了......直到现在。

以下是供参考的问题: 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);
                        }
                    }
                }

            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

此代码for(int k = stringNum.length(); k < stringNum.length()/2; k--)

你的比较搞砸了(&lt;而不是&gt;),你也从stringNum.length()开始,而最后一个字符位于stringNum.length() - 1的位置。

但是,有很多事情你可以改进代码:

  1. 无需"abc"+(""+'d'),您可以直接"abc"+'d'
  2. 无需Integer.parseInt("123") == Integer.parseInt("123"),您可以直接"123".equals("123")

答案 1 :(得分:0)

你的第二个循环

for(int k = stringNum.length(); k < stringNum.length()/2; k--) 

你正在倒数,所以你的终止条件是错误的