# 工学1号馆

home

## Project Euler 36–Double-base palindromes

Wu Yudong    August 20, 2018     欧拉计划   585

Double-base palindromes

The decimal number, 585 = 10010010012 (binary), is palindromic in both bases.

Find the sum of all numbers, less than one million, which are palindromic in base 10 and base 2.

(Please note that the palindromic number, in either base, may not include leading zeros.)

（请注意，无论在哪种进制下，回文数均不考虑前导零。）

//（Problem 36）Double-base palindromes
// Completed on Thu, 31 Oct 2013, 13:12
// Language: C
//
// 版权所有（C）wu yudong
// 博客地址：http://www.wuyudong.com

#include<stdio.h>
#include<stdbool.h>

bool test(int *a, int n)
{
bool flag = true;
for (int i = 0; i < n / 2; i++) {
if (a[i] != a[n - i - 1]) {
flag = false;
break;
}
}
return flag;
}

bool palindromes(int n, int base) //判断整数n在基为base时是否为回文数
{
int a[100];
int i = 0;
while (n) {
a[i++] = n % base;
n /= base;
}
return test(a, i);
}

int main(void)
{
int sum = 0;
for (int i = 1; i <= 1000000; i += 2) {
if (palindromes(i, 10) && palindromes(i, 2))
sum += i;
}
printf("%d\n", sum);
return 0;
}