题目链接:4.Largest palindrome product
题意:
求由两个三位数组成的六位数的回文数
解题思路:
六位数可以写成
num = 100000*x + 10000 * y + 1000 * z + 100 * z + 10 * y + x;
num = 100001 * x + 1100 * y + 1100 * z
num = 11(9091 * x + 910 * y + 100 * z)
得这个回文数是11的倍数
可以进行剪枝
#include <bits/stdc++.h>
using namespace std;
bool get(int num) { // 判断回文
if(num / 100000 == num % 10) {
if(num / 10000 % 10 == num % 100 / 10) {
if(num % 1000 / 100 == num % 10000 / 1000) {
return true;
}
}
}
return false;
}
int main() {
int ans = 0;
for(int num1 = 999; num1 >= 100; num1--) {
int k = 0;
if(num1 % 11 == 0) { // 判断能否整除11
k = 1;
}
for(int num2 = 999; num2 >= 100; num2--) {
if(k == 0 && num2 % 11 == 0) { // 优化
continue;
}
if(num1 * num2 < 100000) { // 小于直接break
break;
}
if(get(num1 * num2)) {
ans = max(ans, num1*num2);
}
}
}
cout << ans << endl;
return 0;
}