2017-07-09 3 views
-1

これは私のコードです。答えは常に100001(そのループを実行しても さえないようです)です。 私はこの問題を解決するはるかに簡単な方法があることを知っていますが、この特定のコードで正確に何が間違っていますか?どのように修正するのですか?Project Eulerのプログラム4のJavaコードで何が問題になっていますか? (2 3桁の数値の最大の回文を見つける)

public class LargestPalindromes 
{ 

public static void main(String[] args) 
{ 
    int largest = 100001; 

    for(int i = 100; i < 1000; i++) 
    {   
     for(int j = 100; j < 1000; j++) 
     { 
      int mult = i * j; 
      if(largest < mult && isPalindrome(mult)) 
       largest = mult; 
     } 
    } 

    System.out.printf("\n\nThe largest palindrome is: %d\n\n", largest); 
} 

public static boolean isPalindrome(int mult) 
{ 
    int n1=0, n2=0, n3=0, n4=0, n5=0, n6=0; 
    int largest = 0, count = 0, p =100000; 
    int x = mult; 

    while(count < 6) 
    { 
     if(count == 1) 
      n1 = x/p; 
     else if(count == 2) 
      n2 = x/p; 
     else if(count == 3) 
      n3 = x/p; 
     else if(count == 4) 
      n4 = x/p; 
     else if(count == 5) 
      n5 = x/p; 
     else if(count == 6) 
      n6 = x/p; 

     x %= p; 

     p /= 10; 

     count++; 
    } 

    int reverse = Integer.valueOf(String.valueOf(n1) + String.valueOf(n2) + String.valueOf(n3) + String.valueOf(n4) + String.valueOf(n5) + String.valueOf(n6)); 

    return reverse == mult; 
} 
} 
+2

もしあれば、予想される出力を説明してください! –

+0

結果は906609で、2桁の3桁の数字の乗算で形成される最大の回文桁ですが、私の結果は常に100001です。私の最後からの入力はありません。 –

答えて

0

public static boolean isPalindrome(int mult)方法であまりにも多くのエラーが発生しました。だから私はそれを標準バージョンに置き換えました:

public static boolean isPalindrome(int mult) 
{ 

    int temp=mult;  
    int r,sum=0; 
    while(mult>0){  
    r=mult%10; //getting remainder 
    sum=(sum*10)+r;  
    mult=mult/10;  
    }  
    if(temp==sum)  
     return true; 
    else{ 
     return false; 
    } 
} 
+1

最後に 'if/else'構文を' return temp == sum; 'に置き換えることができます。 – Blastfurnace

+0

@Blastfurnaceそれでは、この答えはダウンボートに値するのでしょうか? –

+0

私はあなたの答えをdownvoteしませんでした。良い一日を。 – Blastfurnace

関連する問題