/* 函数circle用于判断正整数n的d进制数表示形式是否是回文数 */
#include<stdio.h>
#include<stdlib.h>
int circle(int n, int d){
int s=0,m=n;
while(m)
{
s=s*d+m%d;
m/=d;
}
printf("s=%d\n",s);
return s==n;
}
/* main函数用于测试circle函数 */
int num[]={232,27,851};
int scale[]={2,10,16};
main(){
int i,j;
system("cls");// clrscr();
for(i=0;i<sizeof(num)/sizeof(num[0]);i++)
for(j=0;j<sizeof(scale)/sizeof(scale[0]);j++)
if(circle(num[i],scale[j]))
printf("%d -> (%d) is a Circle Number!\n",num[i],scale[j]);
else
printf("%d -> (%d) is not a Circle Number!\n",num[i],scale[j]);
printf("\n Press any key to quit...\n");
getch();
}
其中以下代码为精华所在:
while(m)
{
s=s*d+m%d;
m/=d;
}
return s==n;
主要思想为把n倒序表示成s,最后判断s与n是否相等,相等即为回文数。
例如:判断数n=123,该进制下d=10是否为回文数?
step1: s=0*10+123%10=3;
m=123/10=12;
step2: s=3*10+12%10=32;
m=12/10=1;
step3: s=32*10+1%10=321;
m=1/10=0;
step4: m=0,退出while循环
step5: return s==n;(321==123判断为false,即该数不为回文数)