打印1到输入数之间的回文数
2016-05-06 23:38
141 查看
对于一个数,要判定它是否是回文数,直观的做法是先判定其最高位(首位)与最低位(最后一位)是否相同,如果不同则不是回文数;如果相同则其掉其做高位和最低位,对剩余的位继续进行判定;如果剩余的位只有一位或零位(即整个数是偶数位)则为回文数。
本程序就是基于这样的基本思想进行计算的。
本程序通用性强,可以计算1到任意指定数之间的所有回文数。
计算回文数还可以用数字字符组合的方法来实现,算法上采用回溯法。
程序如下:
本程序就是基于这样的基本思想进行计算的。
本程序通用性强,可以计算1到任意指定数之间的所有回文数。
计算回文数还可以用数字字符组合的方法来实现,算法上采用回溯法。
程序如下:
/* 打印输出1到输入数之间的回文数 */ #include <stdio.h> 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时,程序运行结果如下:
相关文章推荐
- 1008. Elevator (20)
- 元素显示隐藏的9种思路
- Jlink仿真器下载程序时出现Invalid ROM table!
- Python on VS Code
- Unity Shaders and Effects Cookbook (6-3) 修改渲染队列Queue 来 修改渲染顺序
- 广义线性回归中的Logistic回归
- bootstrap中可用的图标集
- Android的手势
- Android开发中,那些让你相见恨晚的方法、类或接口
- 用servlet上传文件
- 单链表的排序
- Nginx编译链接安装详细步骤
- Xamarin.Forms之库不兼容现象记录
- 010Regular Expression Matching
- 判断单链表中有没有环
- 条件选择语句 if
- 信号
- 动态规划——problem f
- 最小的K个数
- Android View绘制13问13答