【问题标题】:project euler 4 Java项目欧拉4 Java
【发布时间】:2014-09-28 20:28:30
【问题描述】:

我知道我的 isPalindrome 方法有效,因为当我插入 906609 时它返回 true,并且我知道我的 Problem4 方法在某些时候将 993 和 913 相乘,产生 906609,但由于某种原因它等到 580085 才返回数字。我究竟做错了什么?我只是无法让它工作:(

public static boolean isPalindrome(int number){
    //checks to see if a number is a palendrome. (can't start with 0)
    String numstring = Integer.toString(number);
    char[] strarr = new char[String.valueOf(number).length()+1];
    int x = 0;
    int y = String.valueOf(number).length()-1;
    for (int i=0;i<y+1;i++){
        strarr[i] = numstring.charAt(i);
    }
    for (int a=0;a<String.valueOf(number).length()-1;a++){
        if (strarr[x]!=strarr[y]){
            return(false);
        }
        x++;
        y--;
    }
    return(true);
}
public static int Problem4(){
    int pp = 0;
    for (int i=999;i>100;i--){
        for (int j=999;j>100;j--){
            pp = i*j;
            if (isPalindrome(pp)){
                return(pp);
            }
        }
    }
    return(pp);
}

我已经用许多其他数字测试了 isPalindrome,以确保它正常运行。为什么它没有得到答案?我正在向后迭代,所以它应该首先获得最大的回文......


已解决: 我只需要通过在末尾返回并更改变量 a 的值以确保它是最高回文数来确保允许循环达到可能的最高回文数。

public static int Problem4(){
    int pp = 0;
    int a = 0;
    for (int i=100;i<1000;i++){
        for (int j=100;j<1000;j++){
            pp = i*j;
            if (isPalindrome(pp)){
                if (pp>a){
                    a = pp;
                }
            }
        }
    }
    return(a);
}

【问题讨论】:

  • 我认为您的isPalindrome() 方法过于复杂。
  • 是的,这几乎是巴洛克编码的杰作。
  • 这是isPalindrome 的“明显”实现的样子:String s = String.valueOf(n); for (int i = 0, j = s.length()-1; i &lt;= j; i++, j--) if (s.charAt(i) != s.charAt(j)) return false; return true;

标签: java palindrome


【解决方案1】:

如果你添加这样的打印语句:

if (isPalindrome(pp)) {
    System.out.format("i = %d, j = %d%n", i, j);
    return (pp);
}

你得到结果:

i = 995, j = 583
580085

所以,你的程序永远不会到达993 * 913

【讨论】:

  • 感谢 Keppil,我意识到出了什么问题。将两个数字相乘产生一个回文数,但不是最大的数字是在迭代的开始(或结束,如果你向后迭代),所以它只返回那个而不是最大值。确保放置一个 if 条件来检查下一个值是否高于前一个值,然后在循环之后返回以获得正确的答案。谢谢大家!
猜你喜欢
  • 1970-01-01
  • 2017-07-20
  • 2014-03-08
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多