C语言实现计算双基回文数详解

来源:互联网 发布:原型设计软件 编辑:程序博客网 时间:2024/06/06 01:49

双基回文数的定义:

如果一个正整数n至少在两个不同的进位制(二进制<=进制=<十进制)b1和b2下都是回文数,则称n是双基回文数。
根据定义,简单的说就是在二进制到十进制之间(包括十进制和二进制),如果n在这其中任意两个进制上是回文数,则n就是双基回文数。
程序功能:

输入正整数S<10^6,输出比S大的最小双基回文数

源代码及注释:

#include<stdio.h>//把主函数放前面比较好看int main(){int n;//定义n作为sjHuiWen函数中形式参数s的实际参数int count=0; //count用于计数,初始值为0printf("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,长度为40bool flag = true; //定义一个布尔类型的变量flag,赋初值为truewhile(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;}elsereturn true;}return flag;}

运行截图:

图 1
end
更多内容请访问我的个人网站荒原之梦

原创粉丝点击