博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
I00010 打印1到输入数之间的回文数
阅读量:6245 次
发布时间:2019-06-22

本文共 1454 字,大约阅读时间需要 4 分钟。

对于一个数,要判定它是否是回文数,直观的做法是先判定其最高位首位)与最低位最后一位)是否相同,如果不同则不是回文数;如果相同则其掉其做高位和最低位,对剩余的位继续进行判定;如果剩余的位只有一位或零位(即整个数是偶数位)则为回文数。

本程序就是基于这样的基本思想进行计算的。

本程序通用性强,可以计算1到任意指定数之间的所有回文数。

计算回文数还可以用数字字符组合的方法来实现,算法上采用回溯法。

程序如下:

/* 打印输出1到输入数之间的回文数 */#include 
int isPalindrome(long, long);int main(void){ long n, i, mod = 1; scanf("%ld", &n); for(i=1; i<=n; i++) { if(i == mod * 10) mod *= 10; if(isPalindrome(i, mod)) printf("%ld ", i); } printf("\n"); return 0;}// 判断n是否为回文数的函数// 参数n为需要判断是否为回文数的数// 参数bigmod,若n为m位数,其值为10^m-1(10的m-1次方)// 参数bigmod必须事先正确设置int isPalindrome(long n, long bigmod){ int flag = 1; for(;;) { // 判断首位与末位是否相同,不同则不是回文数 if(n/bigmod != n%10) { flag = 0; break; } // 如果只剩下1位或2位结束 if(bigmod <= 10) break; // 去掉最高位和最低位 n %= bigmod; n /= 10; bigmod /= 100; } return flag;}
关键代码:

// 判断n是否为回文数的函数// 参数n为需要判断是否为回文数的数// 参数bigmod,若n为m位数,其值为10^m-1(10的m-1次方)// 参数bigmod必须事先正确设置int isPalindrome(long n, long bigmod){    int flag = 1;    for(;;) {        // 判断首位与末位是否相同,不同则不是回文数        if(n/bigmod != n%10) {            flag = 0;            break;        }        // 如果只剩下1位或2位结束        if(bigmod <= 10)            break;        // 去掉最高位和最低位        n %= bigmod;        n /= 10;        bigmod /= 100;    }    return flag;}
输入20000时,程序运行结果如下:

转载于:https://www.cnblogs.com/tigerisland/p/7564882.html

你可能感兴趣的文章
Hadoop与HBase中遇到的问题(续)java.io.IOException: Non-increasing Bloom keys异常
查看>>
STM32 IAP 在线升级详解(转)
查看>>
LeetCode - Palindrome Number
查看>>
NavMesh名字、层索引、层值之间的转换
查看>>
Painter 12安装教程
查看>>
Android-WizardPager
查看>>
ossim
查看>>
Android应用程序注冊广播接收器(registerReceiver)的过程分析
查看>>
【iOS】单例模式
查看>>
记第五届山东省ACM程序设计比赛——遗憾并非遗憾
查看>>
插入三维对象
查看>>
理解统计信息(2/6):直方图
查看>>
Hibernate学习笔记之EHCache的配置
查看>>
Oracle导入程序Imp的使用详解
查看>>
C#学习笔记(七):智能编译器
查看>>
Openflow协议规范
查看>>
struts2支持的结果处理类型
查看>>
11.2.3 Redis的启动停止
查看>>
如何验证cname,MX,spf记录是否生效?
查看>>
Centos系统mysql 忘记root用户的密码
查看>>