有人能帮我用Java解决Project euler# 4吗?

  • 本文关键字:euler# Project 解决 Java java
  • 更新时间 :
  • 英文 :


好了,伙计们,我知道这不是欧拉项目第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.

然而,你可以在代码方面改进很多东西:

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

你的第二个循环

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

你在倒计时,所以你的终止条件是错误的

最新更新