zoukankan      html  css  js  c++  java
  • 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
    ",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
    end
    更多内容请访问我的个人网站荒原之梦

  • 相关阅读:
    2013-9-29 通信原理学习笔记
    《大数据时代》阅读笔记
    《人人都是产品经理》阅读笔记一
    2013-8-13 信道接入技术研究学习
    2013-8-6 ubuntu基本操作
    2013-7-30 802.1X企业级加密
    2013-7-29 杂记
    2013-7-28 802.11n帧聚合
    2013-7-27 802.1X学习
    vue+node+mongoDB前后端分离个人博客(入门向)
  • 原文地址:https://www.cnblogs.com/wildernessdreams/p/8408801.html
Copyright © 2011-2022 走看看