https://projecteuler.net/problem=4
回文数字两种方式相同。由两个2位数字的乘积制成的最大回文是9009 = 91×99。
找出由两个3位数字的乘积制成的最大回文。
这是我的代码,我发现答案为580085,但这不是正确的答案:
public class asdas {
public static void main(String[] args) {
int a=100,b=100,answer=0;
while(a<=999)
{
b=100;
while(b<=999)
{
int product=a*b;
int reverse=0;
while(product>0)
{
int lastDigit=product%10;
reverse=(reverse*10)+lastDigit;
product=product/10;
}
product=a*b;
if(product==reverse)
{
answer=product;
}
b++;
}
a++;
}
System.out.println(answer);
}
}
答案 0 :(得分:3)
问题在于:
if(product==reverse)
{
answer=product;
}
你假设如果找到回文,它就是最大的。但事实并非如此。
例如,在100 * 102之后计算101 * 100,即使后者更大。事实上,在计算998 * 999(997,002)之后,你计算出999 * 100(99,900),这几乎要小10倍!
您应该添加另一项检查以确保新产品更高:
if(product==reverse && product>answer) {
answer = product;
}