Problem description
所謂回文數(shù)是從左至右或從右至左讀起來都是一樣的數(shù)字,如:121是一個回文數(shù)。計算1至n間共有多少個回文數(shù)。
Input
有多個測試數(shù)據(jù),每個測試數(shù)據(jù)占一行,輸入一個正整數(shù)n(1≤n≤9999)。
Output
輸出一個整數(shù),表示回文數(shù)的個數(shù)。
Sample Input
900
1234
3456
8900
2367
Sample Output
98
111
133
187
122本來回文數(shù)問題是屬于比較簡單的,但是在和實驗室?guī)熜謧冇懻摰臅r候發(fā)現(xiàn)他們的算法思想是:對照左右兩邊的數(shù)字是否對應(yīng)也就是說在他們的算法設(shè)計中還要設(shè)計數(shù)字的奇偶問題,覺得甚為不便...不知道有沒有人也是這樣弄的...其實回文數(shù)的第一個想法就是利用棧的原理,通過將數(shù)字分解壓入棧內(nèi),再出棧重組,若重組后的數(shù)字與原數(shù)相同,則該數(shù)必為回文數(shù)(不知道一位數(shù)算不算,在我的算法實現(xiàn)中將其考慮為回文數(shù)了)剛開始實現(xiàn)算法時本來想構(gòu)造一個棧,不過覺得麻煩,要重新構(gòu)造類等等,代碼并不精簡,而且可讀性也會打折...由于是用java實現(xiàn)程序,所以利用了java中非常好用的string實現(xiàn)了這一功能。很想提高自己代碼的質(zhì)量,所以懇請各位大蝦們給予寶貴意見,非常感謝:)
代碼如下:
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()])
}}
所謂回文數(shù)是從左至右或從右至左讀起來都是一樣的數(shù)字,如:121是一個回文數(shù)。計算1至n間共有多少個回文數(shù)。
Input
有多個測試數(shù)據(jù),每個測試數(shù)據(jù)占一行,輸入一個正整數(shù)n(1≤n≤9999)。
Output
輸出一個整數(shù),表示回文數(shù)的個數(shù)。
Sample Input
900
1234
3456
8900
2367
Sample Output
98
111
133
187
122本來回文數(shù)問題是屬于比較簡單的,但是在和實驗室?guī)熜謧冇懻摰臅r候發(fā)現(xiàn)他們的算法思想是:對照左右兩邊的數(shù)字是否對應(yīng)也就是說在他們的算法設(shè)計中還要設(shè)計數(shù)字的奇偶問題,覺得甚為不便...不知道有沒有人也是這樣弄的...其實回文數(shù)的第一個想法就是利用棧的原理,通過將數(shù)字分解壓入棧內(nèi),再出棧重組,若重組后的數(shù)字與原數(shù)相同,則該數(shù)必為回文數(shù)(不知道一位數(shù)算不算,在我的算法實現(xiàn)中將其考慮為回文數(shù)了)剛開始實現(xiàn)算法時本來想構(gòu)造一個棧,不過覺得麻煩,要重新構(gòu)造類等等,代碼并不精簡,而且可讀性也會打折...由于是用java實現(xiàn)程序,所以利用了java中非常好用的string實現(xiàn)了這一功能。很想提高自己代碼的質(zhì)量,所以懇請各位大蝦們給予寶貴意見,非常感謝:)
代碼如下:
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()])
}}

