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.Scannerimport java.util.Arrays
public class Main
{
public static void main(String args[])
{
int []SaveDigi=new
int[10000] Arrays.fill(SaveDigi,0)
for(int i=1i<10000i++) { String stack=""
int a = (int)i/10
int b = (int)i%10
while(a!=0)
{
stack+=b
b=(int)a%10
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()])
}}
责任编辑:小草