将一个数的数码倒过来所得到的新数叫原数的反序数。如果一个数等于它的反序数,则称它
为对称数。
#include <stdio.h>
#include <string.h>
int f(int n)
{
char a[100],b[100];// a存的是倒过来的二进制数,b放正常顺序的二进制数
int index_a = 0,index_b = 0;
do
{
a[index_a++] = n % 2;
n = n /2;
}while(n);
for(int i = index_a -1;i>=0;i--)
{
b[index_b++] = a[i]; // 将a倒过来赋值给b,倒的倒=正。此时b存的是正常的二进制数
} // 倒的倒=正 可以用线代的 A的逆的逆等于A
if (strcmp(a,b) == 0) // 判断是否为反序数
return 1;
return 0;
}
int main()
{
unsigned num = 0;
for(unsigned int i = 1; i < 1993; i++)
{
if(f(i)) // 判断是否为反序数
num = i; // 是则赋值为num,因为是递增的,肯定最后一次是最大的
}
printf("不超过1997的最大二进制的对称数:%d\n",num);
return 0;
}