首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >项目euler 4 Java

项目euler 4 Java
EN

Stack Overflow用户
提问于 2014-09-28 20:28:30
回答 1查看 3.2K关注 0票数 0

我知道我的isPalindrome方法可以工作,因为当我插入906609时,它会返回true,并且我知道我的Problem4方法在某一点上会将993和913相乘,从而产生906609,但由于某种原因,它会等到580085才返回这个数字。我做错了什么?我只是无法使它起作用:

代码语言:javascript
复制
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的值,以确保它是最高的回文。

代码语言:javascript
复制
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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-28 20:36:31

如果添加如下打印语句:

代码语言:javascript
复制
if (isPalindrome(pp)) {
    System.out.format("i = %d, j = %d%n", i, j);
    return (pp);
}

你得到的结果:

代码语言:javascript
复制
i = 995, j = 583
580085

所以,您的程序从未出现在993 * 913上。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26089316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档