作者:荒原之梦
双基回文数的定义:
如果一个正整数n至少在两个不同的进位制(二进制<=进制=<十进制)b1和b2下都是回文数,则称n是双基回文数。
根据定义,简单的说就是在二进制到十进制之间(包括十进制和二进制),如果n在这其中任意两个进制上是回文数,则n就是双基回文数。
程序功能:
输入正整数S<10^6,输出比S大的最小双基回文数
源代码及注释:
#include<stdio.h> //把主函数放前面比较好看 int main() { int n; //定义n作为sjHuiWen函数中形式参数s的实际参数 int count=0; //count用于计数,初始值为0 printf("Enter a number:"); scanf("%d",&n); //读取要处理的数字 ,如2200,该数字不一定为回文数,因为我们想要求的只是比该数字大的最小回文数 int a=n;//使用a先把n的值保存一下 bool sjHuiWen(int m,int base); //定义base代表进制 //下面会调用sjHuiWen函数,调用之前要先声明一下 while(count!=2) { n++; count=0; for(int base=2;base<=10;base++) { if(sjHuiWen(n,base)) //if判断只会在括号内为true时才会执行下一步操作,如果sjHuiWen函数返回true,则表示n是回文数 { count++; //n是回文数则+1 } if(count==2) break; //调用sjHuiWen函数判断n是不是回文数,如果在两个进制下都是回文数,则跳出循环 } } printf("比%d大的最小双基回文数为:%d\n",a,n); return 0; } //定义sjHuiWen函数 ,功能是判断数字n在进制base下是不是回文数 bool sjHuiWen(int m,int base)//m是形式参数,n是实际参数 //定义一个函数sjHuiWen,函数类型为布尔类型(由于return返回的值flag是布尔类型,所以函数就是布尔类型) { int str[10],i = 0; //定义一个数组str,长度为40 bool flag = true; //定义一个布尔类型的变量flag,赋初值为true while(m) //m是一个整型变量,当m还是一个整型变量时就继续循环,直到m不是一个整型变量 { str[i++] = m%base;//取余,从m的个位开始将每一位上的数字变成base位进制并依次存入数组 m /= base; //每取一次余数,就把最后一位的数字去掉 } for(int j = 0;j <= i/2;j++) { if(str[j] != str[i-j-1]){ flag = false; }else return true; } return flag; }