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

作者:荒原之梦

双基回文数的定义:

如果一个正整数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;
}

运行截图:

图 1

解决C语言程序报错:return type defaults to‘int’

下面是通过自定义一个函数printN,之后在main函数中调用printN,使得可以通过输入整数N,将从1到N的全部整数都打印出来的程序。
但是在编译过程中却报错:

return type defaults to ‘int’

产生报错的原因:

printN的默认返回值类型是int类型的,这样调用printN函数的main函数就需要定义为:

int main()

而不是:

main()

产生报错的程序:

#include<stdio.h>

//自定义printN函数
void printN (int N){
    int i;
    for(i = 1; i <= N; i++){
        printf("%d\n",i);
        }
        return;
    }

//声明printN函数
void printN(int N);

main(void)
{
    int N;
    printf("请输入N:");
    scanf("%d",&N);//传入参数
    printN(N);//调用printN函数
return 0;
    }

改正之后的程序:

#include<stdio.h>

//自定义printN函数
void printN (int N){
    int i;
    for(i = 1; i <= N; i++){
        printf("%d\n",i);
        }
        return;
    }

//声明printN函数
void printN(int N);

int main(void)
{
    int N;
    printf("请输入N:");
    scanf("%d",&N);//传入参数
    printN(N);//调用printN函数
return 0;
    }