这是我到目前为止写的。它编译,据我所知,它应该“工作”——如果你给你的电脑无限的时间来计算答案!
我只是想知道是否有人能给我一种优化方法,这样我的程序就会告诉我最高回文数(向前和向后都相同,例如 91 * 99 = 9009;)由将任意两个三位数相乘。
public class HighestPalindrome {
public static void main(String[] args) {
int number=0;
int answer=0;
search:
for(int LoopOfFirstNumber=999;LoopOfFirstNumber<=100;LoopOfFirstNumber -= 3){
for(int LoopOfSecondNumber=LoopOfFirstNumber;LoopOfSecondNumber<=100;LoopOfSecondNumber-=3)
{
number = LoopOfFirstNumber * LoopOfSecondNumber;
if (number == reverse(number))
{
answer=number;
System.out.println(answer);
break search;
}
}
}
}
//The code after this works fine, I believe. It will reverse any number given very quickly, I think the problem
//is above....with the two for loops!
private static int reverse(int n, int r) {
if (n == 0) return r;
System.out.println("This iteration returns " + n/10 + " and " + 10*r+n%10);
return reverse(n/10, 10*r+n%10);
}
public static int reverse(int n) {
return reverse(n, 0);
}
最佳答案
正如您已经猜到的,问题出在嵌套循环中。尝试找出数字的一些属性。两个三位数的乘法总是会得到一个有五位或六位的数字。由于您正在寻找最高数字,因此它应该是从数字 9 开始的六位数字,并且由于它是回文,它可能也以数字 9 结尾。简而言之,您需要 9xyyx9 形式的数字。
接下来,并不是所有的数字对都可以相乘并以数字 9 结尾。xx3 和 xx3 将得到 xxxxx9,xx1 和 xx9 也是如此;但是 xx1 和 xx8 永远不会乘以 xxxxx9。
查找此类属性,并尝试过滤哪些可能可以轻松实现到您的搜索中。
关于java - 如何优化我糟糕的代码以找到 3 位数字的最高回文数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4013676/