注册
 找回密码
 注册
江西广告网
查看: 562|回复: 0
打印 上一主题 下一主题

实例:求回文数的个数

[复制链接]

该用户从未签到

1
跳转到指定楼层
发表于 2009-2-24 10:37:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
Problem description 所谓回文数是从左至右或从右至左读起来都是一样的数字,如:121是一个回文数。计算1至n间共有多少个回文数。 Input 有多个测试数据,每个测试数据占一行,输入一个正整数n(1≤n≤9999)。 Output 输出一个整数,表示回文数的个数。 Sample Input 900 1234 3456 8900 2367 Sample Output 98 111 133 187 122本来回文数问题是属于比较简单的,但是在和实验室师兄们讨论的时候发现他们的算法思想是:对照左右两边的数字是否对应也就是说在他们的算法设计中还要设计数字的奇偶问题,觉得甚为不便...不知道有没有人也是这样弄的...其实回文数的第一个想法就是利用栈的原理,通过将数字分解压入栈内,再出栈重组,若重组后的数字与原数相同,则该数必为回文数(不知道一位数算不算,在我的算法实现中将其考虑为回文数了)刚开始实现算法时本来想构造一个栈,不过觉得麻烦,要重新构造类等等,代码并不精简,而且可读性也会打折...由于是用java实现程序,所以利用了java中非常好用的string实现了这一功能。很想提高自己代码的质量,所以恳请各位大虾们给予宝贵意见,非常感谢:)代码如下:import java.util.Scanner;import java.util.Arrays;public class Main{ public static void main(String args[]) { int []SaveDigi=new int[10000]; Arrays.fill(SaveDigi,0); for(int i=1;i<10000;i ) { String stack=""; int a = (int)i/10; int b = (int)i; while(a!=0) { stack =b; b=(int)a; a=(int)a/10; } stack =b; if(stack.equals(new String().valueOf(i))) SaveDigi[i]= SaveDigi[0]; else SaveDigi[i]=SaveDigi[i-1]; } Scanner stdin=new Scanner(System.in); while(stdin.hasNext()) System.out.println(SaveDigi[stdin.nextInt()]); }}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表