双进制回文数
十进制数585 = 10010010012(二进制表示),因此它在这两种进制下都是回文数。
找出所有小于一百万,且在十进制和二进制下均回文的数,并求它们的和。
(请注意,无论在哪种进制下,回文数均不考虑前导零。)
代码演示
#include <iostream>
using namespace std;
#define MAX_N 1000000
int is_val(int n, int base) {
int temp = 0;
while (n) {
temp = temp * base + n % base;
n /= base;
}
return temp;
}
int main() {
int sum = 0;
for (int i = 1; i <= MAX_N; i++) {
if (is_val(i, 2) == is_val (i, 10) && is_val(i, 10) == i) {
sum += i;
}
}
cout << sum << endl;
return 0;
}