【问题标题】:Finding palindrome numbers寻找回文数
【发布时间】:2021-05-31 12:13:21
【问题描述】:

我正在尝试制作一个 java 代码,该代码显示由两个 3 位数字的乘积构成的最大回文数。它输出所有回文,而不是按数字顺序。我不知道为什么。请帮忙! 这是我的代码:

`class Scratch { 公共静态无效主要(字符串[]参数){ int dig1, dig2, dig3, dig4, dig5, dig6, 产品;

    for (int i =999; i>100; i--){
        for (int j =999; j>=i;j--){
            product = j*i;
            dig1= product/100000;
            dig2= (product/10000)%10;
            dig3= (product/1000)%10;
            dig4= (product/100)%10;
            dig5= (product/10)%10;
            dig6= (product%10);
            if ((dig1==dig6) && (dig2==dig5) && (dig3==dig4)){
                System.out.println((product));
                break;
            }

        }

    }
}}

【问题讨论】:

  • 请阅读How to Ask。解释你遇到了什么问题。您是否使用调试器单步执行了您的程序?
  • 使用该算法,您必须保存找到的最大产品(循环时;如果搜索最大,我将从999 开始并递减;i*j 与j*i 相同,所以不是必须测试所有数字组合(例如100*101 与101*100 相同)仅测试例如j >= i
  • 和 % 100 将返回 2 位数字

标签: java


【解决方案1】:

一些建议。

  • 为避免重复对,您可以这样做。
for (int i = 999; i > 100; i--) {
    for (int k = i; k > 100; k--) {
  • 要反转数字的数字,您可以在 while 循环中执行此操作。
    下面,val 是i 和j 的乘积。
int rev = 0;
int temp = val;
while (temp != 0) {
    rev = rev * 10 + temp % 10;
    temp /= 10;
}

然后

if (rev == val) { is a palindrome?
   ...
}

当找到每个数字时,您可以找到最大的数字,如下所示。在开始时, 将max 初始化为 Integer.MIN_VALUE。然后执行以下操作:

int savei = 0;
int savej = 0;
int max = Integer.MIN_VALUE;

// then later as you find the palindromes.
if (max < val) {
   max = val;
   savei = i
   savej = j;
}

最后,你将得到最大的回文数和将它分开的三位数字。

【讨论】:

  • 谢谢!最大的数字出现在 2 次迭代之后。如何让它只显示那个数字?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-24
  • 1970-01-01
  • 1970-01-01
  • 2012-07-26
  • 1970-01-01
相关资源
最近更新 更多