java - 欧拉项目 4 Java

标签 java palindrome

我知道我的 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);
}

最佳答案

如果添加如下打印语句:

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

你得到的结果是:

i = 995, j = 583
580085

因此,您的程序永远不会达到 993 * 913

关于java - 欧拉项目 4 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26089316/

相关文章:

java - 我如何将 int 作为 SQLite 中 where 子句的参数传递?

java - LocalDate.parse 是否会默默地更正天数?

c++ - 堆栈和队列以测试回文

ruby - 我的回文程序有什么问题? (Ruby,用户自己输入字符串)

java - 动态创建对象的依赖注入(inject)的好处

IntelliJ IDEA 中的 java Maven 项目,如何找到不需要的依赖项?

java - 如何使用 SLF4JBridgeHandler 以编程方式设置 slf4j 记录器

haskell - 忽略非字母数字字符和大小写的回文检查器 Haskell

VBA 回文函数