我为欧拉项目的第四个问题编写了一个代码。
问题是: 回文数字两种方式相同。由两个2位数字的乘积制成的最大回文是9009 = 91×99。
找出由两个3位数字的乘积制成的最大回文。
这是我的代码:
public class LargestPalindromeProduct {
private static int product;//integer palindrome number
private static String palindrome;//string palindrome
private static int largestPalindrome(){
for(int i = 100; i<=999; i++){
for(int k = 100; k<=999; k++){
product = i*k;
palindrome = Integer.toString(product);
for(int j = 0; j<= palindrome.length()-1; j++){
if(palindrome.charAt(j) == palindrome.length() - 1 - j){
return product;
}
}
}
}
return product;
}
public static void main(String[] args) {
int largestPalindrome = largestPalindrome();
System.out.println(largestPalindrome);
}
}
此代码以998001作为输出。 你能帮我找一下问题所在吗?
答案 0 :(得分:1)
您在获得1场比赛时返回,而不是继续检查,直到所有比赛。
if(palindrome.charAt(j) == palindrome.length() - 1 - j){
return product;
}
正如@soong指出实际比较正在进行charAt()
vs length
更好地检查您的比较方式。
答案 1 :(得分:0)
我所做的是从999999开始并向下计数,然后测试该数字是否为回文,如果数字是回文,则测试它是否有2个整数因子。
我不会给你所有的代码,但这是检查你可能没有想过的回文的一种方法。
public static boolean isPalindrome(int palindrome) {
StringBuilder builder = new StringBuilder(Integer.toString(palindrome));
builder.reverse();
return Integer.valueOf(builder.toString()) == palindrome;
}
答案 2 :(得分:0)
关闭,但要使您的模式生效,您必须尝试所有组合并返回最大的组合。另外,不要在不匹配时使方法短路,只要打破循环。
尝试一些类似于我添加的更改......
public class LargestPalindromeProduct {
private static int largestPalindrome() {
int max = 0;
for(int i = 100; i<=999; i++) {
for(int k = 100; k<=999; k++) {
int product = i*k;
if (product <= max) {
continue;
}
String palindrome = Integer.toString(product);
boolean good = true;
for(int j = 0; j<= palindrome.length()-1; j++) {
if(palindrome.charAt(j) != palindrome.charAt(palindrome.length() - 1 - j)) {
good = false;
break;
}
}
if (good)
max = product;
}
}
}
return max;
}
public static void main(String[] args) {
int largestPalindrome = largestPalindrome();
System.out.println(largestPalindrome);
}