找到由两个3位数字的乘积制成的最大回文。 (JAVA)

时间:2016-10-01 13:39:14

标签: java

我在解决Project Euler问题4时遇到了一些麻烦。我对编程缺乏经验,并没有真正理解其他答案。我设法写了一个代码,打印所有六位数的回文。如何找到由两个3位数字相乘得出的最大回文?

public class Main {

    public static void main(String[] args) {
        int num = 998001;
        int count=0;
        int temp1, temp2, temp3, temp4, temp5, temp6;
        int temp;
        int num1=999;
        int num2=100;
        for (int i = 100000; i <= 998001; i++) {
            num=998001-count;
            temp=num;
            temp1=temp%10;
            temp=temp/10;
            temp2=temp%10;
            temp=temp/10;
            temp3=temp%10;
            temp=temp/10;
            temp4=temp%10;
            temp=temp/10;
            temp5=temp%10;
            temp=temp/10;
            temp6=temp%10;
            temp=temp/10;

            if (temp1==temp6 && temp5==temp2 && temp3==temp4) {
                System.out.println(num);
            }
            count=count+1;
        }
    }
}

4 个答案:

答案 0 :(得分:0)

这是一种循环遍历1-999的所有数字并将它们与1-999中所有可能数字相乘的方法。您需要定义一个方法<DataGrid x:Name="dataGridSpeciel" Height="183" CanUserAddRows="False" VerticalAlignment="Bottom" Margin="8,0,3,10.2" FlowDirection="RightToLeft" AutoGenerateColumns="False" AlternatingRowBackground="#FFD4B4B4" RowBackground="#FFBFD4E8" GridLinesVisibility="Horizontal" SelectionMode="Single" RowEditEnding="dataGridSpeciel_RowEditEnding" CellEditEnding="dataGridSpeciel_CellEditEnding" PreviewMouseLeftButtonDown="dataGridSpeciel_PreviewMouseLeftButtonDown"> ,它将检查给定的int是否是回文。

isPalindrome(int)

//save the largest number int largest = 0; //loop over every possible product of numbers from 100-999 for (int i = 999; i >= 100; i--) { for (int j = i; j >= 100; j--) { int curr = i * j; //if the current number is a palindrome and is greater than the last found largest if (isPalindrome(curr) && curr > largest) { //save it as the new largest found number largest = curr; } } } 方法可能如下所示:

isPalindrome

答案 1 :(得分:0)

3位循环可以从100到1000(不包括)开始。

你可以尝试这个::

int num1 = 0, num2 = 0;
for(int i=100; i<1000; i++){
    for(int j=100; j<1000; j++){
        String mul = String.valueOf(i*j);
        if(isPalindrome(mul)){
            num1 = i;
            num2 = j;
        }
    }
}
System.out.println(num1*num2);

实施回文方法:

boolean isPalindrome(String str) {
    String strRev = new StringBuilder(str).reverse().toString();
    return str.equals(strRev);
}

这很好用,但请将此作为参考,并根据需要进行改进 感谢

答案 2 :(得分:0)

以下是检查PALINDROME - 代码的代码而不将其转换为String的代码。

bool checkPalindrome(int n)
{
    int num = n;
    int s = 0;
    while(num!=0)
    {
      s = s*10 + (num%10);
      num = num/10;
    }
    if(s==n)
      return true;
    return false;
}

正如您所看到的,如果n = 120,则反向计算为s = 21而不是021,但这很好,请记住,回文数字不会在0中结束,因为如果确实如此,那么它必须以0开头,这使得它成为无效数字!!!!

希望这会有所帮助!!!

答案 3 :(得分:0)

以下是我对同一问题的看法......

更容易创建一个列表,我们知道这些列表将从最小到最大填充,因为计数器数字只有rize ......

└── store/
    ├──user/
    │  └── index.js
    │  └── changeName.js
    └──posts/
       └── index.js
       └── delete.js

基本上,如果它是回文,你只需要很少的投射,但如果是,只需将i和j相乘就可以将它们放入列表......它会循环很长时间,但是这样你检查了所有最大的回文数字大于900 ...

希望我帮助过......