java循环的意外行为

Rol*_*nez 0 java math

我有这样的问题: -

A palindromic number reads the same both ways. The largest palindrome made from the product of two 2-digit numbers is 9009 = 91 × 99.
Find the largest palindrome made from the product of two 3-digit numbers.
Run Code Online (Sandbox Code Playgroud)

为了解决这个问题,我写了一个这样的程序:

public void palindrome(){
        int n=0;
        for (int i = 100; i < 999; i++) { // I belive that largest palindrome is between 100 and 999
            for (int j = 100; j <999; j++) {
                n=i*j;
                if(n>100000){
                    if(n/100000==n%10){
                        if(n/10000-(n/100000)*10==(n%100)/10){
                            if(n/1000-(n/10000)*10==(n%1000)/100){
                                System.out.println(n);

                            }
                        }
                    }
                }
            } 
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是输出是这样的: - 580085如果我改变这样的循环

for (int i = 900; i < 999; i++) { // I belive that largest palindrome is between 900 and 999
                for (int j = 900; j <999; j++) {
Run Code Online (Sandbox Code Playgroud)

然后它得到了正确的答案,我无法理解这个程序的行为?谁有人解释一下?

JoK*_*n85 5

你的算法错了.循环应该是这样的:

    public void palindrome(){
    int n=0,largest=0;
    for (int i = 100; i <= 999; i++) { // I belive that largest palindrome is between 100 and 999
        for (int j = i+1; j <=999; j++) {
            n=i*j;
            if(n>100000){
                if(n/100000==n%10){//first and last
                    if((n/10000)%10==(n%100)/10){ //second and fifth
                        if((n/1000)%10==(n%1000)/100){ //third and fourth
                            if(n>largest) largest=n;

                        }
                    }
                }
            }
        } 
    }
    System.out.println(largest);
}
Run Code Online (Sandbox Code Playgroud)

这不是你的算法错了,但我很确定它会两次输出相同的结果.当i = 993且j = 913且i = 913且j = 993时,您将看到结果.但在这种情况下,输出将按i的最大值排序,这不一定会产生最大的产品.你当前的循环是排列,你需要组合来解决这个问题,即101*121等于121*101,不要重复相同的乘法两次.