我在解决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;
}
}
}
答案 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 ...
希望我帮助过......