#include <stdio.h>
#include <string.h>
#include <math.h>
void reverse(char str[], char rts[]);
void Dec2bin(int, char []);
void reverse(char str[], char rts[])//回文
{
int i, j, k;
k = strlen(str);
for (i = 0, j = k - 1; i < k; i++, j--)
{
rts[i] = str[j];
}
rts[k] = '\0';
}
void Dec2bin(int num, char bin[])//十进制转二进制
{
int i = 0, j, k;
j = num;
while (j)
{
k = j % 2;
bin[i++] = k + '0';
j /= 2;
}
bin[i] = '\0';
}
main()
{
char str[128], rts[128], bin[128];
int i, j, k, len, flag = 1, sum = 0;
for (i = 1; i < 1000000; i += 2) //由于要二进制回文后也相等,所以只能是偶数
{
sprintf(str, "%d", i);
reverse(str, rts);
k = atoi(rts);
if (k == i)
{
Dec2bin(i, bin);
reverse(bin, rts);
len = strlen(bin);
for (j = 0; j < len; j++)
{
if (bin[j] != rts[j])
{
flag = 0;
break;
}
}
if (flag)
{
sum += i;
printf("%d ", i);
}
flag = 1;
}
}
printf("\n%d\n", sum);
}
答案为:
1 3 5 7 9 33 99 313 585 717 7447 9009 15351 32223 39993 53235 53835 73737 585585
总和为:872187 |