求两个三位数相乘得到的最大回文数
所谓的回文数是指:
一个像14641这样“对称”的数,即:将这个数的数字按相反的顺序重新排列后,所得到的数和原来的数一样。这里,“回文”是指像“妈妈爱我,我爱妈妈”这样的,正读反读都相同的单词或句子。
例如由两个两位数相乘得到的最大回文数为9009
,9009 = 91 * 99
。这里要求的是两个三位数相乘得到的最大回文数。
下面内容的侧重点是如何提高寻找这样一个回文数的效率,而不再阐述具体每一段代码所表示的含义。
按照正常的枚举法思路,程序要实现的功能为,从100
到999
一一列举范围中的值,并将两个数进行乘法运算,对得到的结果进行是否为回文数的判断,代码展示如下:
#include <iostream>
using namespace std;
int isPalin(int n) {
int tmp = n;
int res = 0;
while ( tmp ) {
res = res * 10 + tmp % 10;
tmp = tmp / 10;
}
return res == n;
}
int main() {
int x = 0;
for ( int i = 100; i <= 999; i++ ) {
for ( int j = 100; j <= 999; j++ ) {
if ( isPalin(i * j) && i * j > x ) x