算法系列——打印回文数
2015-09-07 11:31
134 查看
回文数判定是学习程序设计和初等算法设计的时候,经常会遇到的题目,对于回文数的判定算法包含了算法过程设计的基础性思考,今天又碰到这个问题,恰好正在深入学习Java,所以用Java做了算法的重写,特此记录。
1.回文数正着读,倒着读一样,也就是说它本身与它自身的反转序列保持一致。
2.回文数具备对称性,既可以是偶数型对称,也可以是奇数型对称。
由此我们可以得出判定回文数的两种方式。
一种是取得原数的反转数字,与原数字对比;另外一种则是通过比较对称位置的数字是否均相同来判定是否是回文数。
第2个回文数:2
第3个回文数:3
第4个回文数:4
第5个回文数:5
第6个回文数:6
第7个回文数:7
第8个回文数:8
第9个回文数:9
......
......
......
第194个回文数:9559
第195个回文数:9669
第196个回文数:9779
第197个回文数:9889
第198个回文数:9999
概念
设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。例如,若n=1234321,则称n为一回文数;但若n=1234567,则n不是回文数。题目要求
输出1-10000内回文数。思路分析
根据回文数的定义,可以知道回文数的几个特征1.回文数正着读,倒着读一样,也就是说它本身与它自身的反转序列保持一致。
2.回文数具备对称性,既可以是偶数型对称,也可以是奇数型对称。
由此我们可以得出判定回文数的两种方式。
一种是取得原数的反转数字,与原数字对比;另外一种则是通过比较对称位置的数字是否均相同来判定是否是回文数。
代码
public class CircleNumber { /** * 打印10000以内的回文数 */ public static void main(String[] args) { int count = 0; for (int i = 1; i <= 10000; i++) if (isCircleNumber3(i)) { count++; System.out.println("第" + count + "个回文数:" + i); } } // 将字符串转置,然后调用equals方法比较 public static boolean isCircleNumber1(int num) { String num_str = String.valueOf(num); StringBuffer sb = new StringBuffer(num_str).reverse(); return num_str.equals(sb.toString()); } // 计算原数字的反转数字,与原数字对比 public static boolean isCircleNumber2(int num) { int temp = 0; int oldValue = num; while (num > 0) { temp = temp * 10 + num % 10; num /= 10; } return oldValue == temp; } // 根据对称特征来进行回文数判定的写法 public static boolean isCircleNumber3(int num) { // 获取字符串表示便于取值 String temp = String.valueOf(num); // 获取数字长度 int len = temp.length(); // 定义两个游标 int i = 0, j = len - 1; while (i <= len / 2 && j >= len / 2) { if (temp.charAt(i) == temp.charAt(j)) { i++; j--; } else return false; } return true; } }
运行结果
第1个回文数:1第2个回文数:2
第3个回文数:3
第4个回文数:4
第5个回文数:5
第6个回文数:6
第7个回文数:7
第8个回文数:8
第9个回文数:9
......
......
......
第194个回文数:9559
第195个回文数:9669
第196个回文数:9779
第197个回文数:9889
第198个回文数:9999
相关文章推荐
- 字典序问题
- CodeForces 429B Working out
- 面试题 13
- Python File writelines() Method 按行写文件
- 有限责任公司自愿解散基本流程及需要注意的事项
- Week1----9月8日 HTML基础
- Android 最火的快速开发框架XUtils
- 安装jd-core反编译
- 安卓-APK反编译
- quick-3.5 无法正常显示有混合纹理的csb文件
- MSSql Server基础学习系列———分组排序
- Unity Mobile Device Input
- 音乐播放器项目
- C++项目中的extern "C" {}
- Android学习总结之性能优化
- C#命名规范
- Objective-C可变参数方法的定义和使用
- NIO与IO的区别与使用
- Java的HashMap和HashTable
- J2EE中后台action与ajax的搭配使用