问题描述如下:
“回文数从两边读值是一样的。两个两位数乘积的最大回文数是9009=99*99,求两个三位数乘积的最大回文数?”
那么我们很快就可以得到实现代码,如下:
private static Long getPalindromicNumber() {
Long max = 0L;
for (Long i = 100L; i <= 999; i++) {
for (Long j = 100L; j <= 999; j++) {
if (isPalindromicNumber(i * j)) {
if (i * j > max) {
max = i * j;
}
}
}
}
return max;
}
private static boolean isPalindromicNumber(Long n) {
StringBuffer s = new StringBuffer(n + "");
s.reverse();
return Long.parseLong(s.toString()) == n;
}
可以得到结果906609。
那么还有地方可以优化么?
如果循环从999开始到100,那么就可以更早的获得最大的回文数而不用因为三位数小而去改变max。
private static Long getPalindromicNumber() {
Long max = 0L;
for (Long i = 999L; i >= 100; i--) {
for (Long j = 999L; j >= 100; j--) {
if (isPalindromicNumber(i * j)) {
if (i * j > max) {
max = i * j;
}
}
}
}
return max;
}
我们再去观察,如果某个回文数888888=924*962,那么也有可能是962*924,两次获得某个回文数,如果判断j>i,应该可以回避此问题,减少将近一半的数值计算。
private static Long getPalindromicNumber() {
Long max = 0L;
for (Long i = 999L; i >= 100; i--) {
for (Long j = 999L; j >= i; j--) {
if (isPalindromicNumber(i * j)) {
if (i * j > max) {
max = i * j;
}
}
}
}
return max;
}
end,请不吝赐教!
@anthor ClumsyBird
分享到:
相关推荐
- **问题描述**:寻找两个三位数相乘得到的最大回文数(即正读反读都一样的数)。 - **算法思路**: - 使用双重循环,外层循环从最大的三位数开始递减至最小的三位数。 - 内层循环也从最大的三位数开始递减。 - ...
两个三位数的最大回文乘积是多少? 背景 回文数在两个方向上都相同。 例如, 101是回文, 91,519和1,111也是91,519 。 例如,由两个两位数的乘积构成的最大回文数为9009: 91 * 99 # => 9009 您的目标是找到由两个三...
两个三位数的最大回文乘积是多少? 背景 回文数在两个方向上都相同。 例如, 101是回文, 91,519和1,111也是91,519 。 例如,由两个两位数的乘积构成的最大回文数为9009: 91 * 99 # => 9009 您的目标是找到由两个三...
本题要求找出最大的由两个三位数乘积构成的回文数。 **解析:** 为了找到最大的三位数乘积构成的回文数,我们可以从最大的三位数(999)开始逐步减少,同时遍历所有可能的三位数乘积,检查结果是否为回文数,若是则...
两个三位数的最大回文乘积是多少? 背景 回文数在两个方向上都相同。 例如, 101是回文, 91,519和1,111也是91,519 。 例如,由两个两位数的乘积构成的最大回文数为9009: 91 * 99 # => 9009 您的目标是找到由两个三...
两个三位数的最大回文乘积是多少? 背景 回文数在两个方向上都相同。 例如, 101是回文, 91,519和1,111也是91,519 。 例如,由两个两位数的乘积构成的最大回文数为9009: 91 * 99 # => 9009 您的目标是找到由两个三...
在高中数学的学习中,了解和掌握数据的统计特征至关重要,特别是众数、中位数和平均数这三个核心概念。它们都是衡量数据集中趋势的重要指标,能够帮助我们理解数据集的整体情况。 1. **众数**:众数是一组数据中...
两个三位数的最大回文乘积是多少? 背景 回文数在两个方向上都相同。 例如, 101是回文, 91,519和1,111也是91,519 。 例如,由两个两位数的乘积构成的最大回文数为9009: 91 * 99 # => 9009 您的目标是找到由两个三...
两个三位数的最大回文乘积是多少? 背景 回文数在两个方向上都相同。 例如, 101是回文, 91,519和1,111也是91,519 。 例如,由两个两位数的乘积构成的最大回文数为9009: 91 * 99 # => 9009 您的目标是找到由两个三...
两个三位数的最大回文乘积是多少? 背景 回文数在两个方向上都相同。 例如, 101是回文, 91,519和1,111也是91,519 。 例如,由两个两位数的乘积构成的最大回文数为9009: 91 * 99 # => 9009 您的目标是找到由两个三...
两个三位数的最大回文乘积是多少? 背景 回文数在两个方向上都相同。 例如, 101是回文, 91,519和1,111也是91,519 。 例如,由两个两位数的乘积构成的最大回文数为9009: 91 * 99 # => 9009 您的目标是找到由两个三...
两个三位数的最大回文乘积是多少? 背景 回文数在两个方向上都相同。 例如, 101是回文, 91,519和1,111也是91,519 。 例如,由两个两位数的乘积构成的最大回文数为9009: 91 * 99 # => 9009 您的目标是找到由两个三...
两个三位数的最大回文乘积是多少? 背景 回文数在两个方向上都相同。 例如, 101是回文, 91,519和1,111也是91,519 。 例如,由两个两位数的乘积构成的最大回文数为9009: 91 * 99 # => 9009 您的目标是找到由两个三...
两个三位数的最大回文乘积是多少? 背景 回文数在两个方向上都相同。 例如, 101是回文, 91,519和1,111也是91,519 。 例如,由两个两位数的乘积构成的最大回文数为9009: 91 * 99 # => 9009 您的目标是找到由两个三...
两个三位数的最大回文乘积是多少? 背景 回文数在两个方向上都相同。 例如, 101是回文, 91,519和1,111也是91,519 。 例如,由两个两位数的乘积构成的最大回文数为9009: 91 * 99 # => 9009 您的目标是找到由两个三...
两个三位数的最大回文乘积是多少? 背景 回文数在两个方向上都相同。 例如, 101是回文, 91,519和1,111也是91,519 。 例如,由两个两位数的乘积构成的最大回文数为9009: 91 * 99 # => 9009 您的目标是找到由两个三...
两个三位数的最大回文乘积是多少? 背景 回文数在两个方向上都相同。 例如, 101是回文, 91,519和1,111也是91,519 。 例如,由两个两位数的乘积构成的最大回文数为9009: 91 * 99 # => 9009 您的目标是找到由两个...
两个三位数的最大回文乘积是多少? 背景 回文数在两个方向上都相同。 例如, 101是回文, 91,519和1,111也是91,519 。 例如,由两个两位数的乘积构成的最大回文数为9009: 91 * 99 # => 9009 您的目标是找到由两个...
此问题要求找出最大的由两个三位数相乘得到的回文数。解决方法是通过两重嵌套循环,从999到100依次尝试每一对三位数的乘积,检查是否为回文数,并记录最大的一个。 **关键概念**: - **回文检测**:将数转换为字符...