題目來源:中國大學(xué)MOOC——零基礎(chǔ)學(xué)JAVA
第四周編程題嫉拐,完整題目如下:
題目內(nèi)容:
你的程序要讀入一個整數(shù)趟薄,范圍是[-100000,100000]贱枣。然后冤馏,用漢語拼音將這個整數(shù)的每一位輸出出來日麸。
如輸入1234,則輸出:
yi er san si
注意逮光,每個字的拼音之間有一個空格代箭,但是最后的字后面沒有空格辕录。當(dāng)遇到負(fù)數(shù)時,在輸出的開頭加上“fu”梢卸,如-2341輸出為:
fu er san si yi
輸入格式:
一個整數(shù),范圍是[-100000,100000]副女。
輸出格式:
表示這個整數(shù)的每一位數(shù)字的漢語拼音蛤高,每一位數(shù)字的拼音之間以空格分隔,末尾沒有空格碑幅。
輸入樣例:
-30
輸出樣例:
fu san ling
本人的解題思路如下戴陡,如有不同意見,歡迎討論沟涨。
根據(jù)數(shù)字范圍創(chuàng)建一個長度為6位的整型數(shù)組恤批,用于保存用戶輸入的數(shù);
通過 % 和 / 來得到每一個位置上的數(shù)字裹赴,添加入數(shù)組中喜庞,這里有一個問題,比如我輸入的是:12345
那么存入數(shù)組的時候是這樣的:5 4 3 2 1棋返,這個沒影響延都,倒序遍歷輸出就可以了,關(guān)鍵問題是數(shù)字和拼音的映射關(guān)系睛竣,這里就要用到 switch……case晰房,需要注意的是case :后面要加break;不然每次就只讀到最后一個case射沟,這也是我踩過的坑殊者。剩下就簡單多了,判斷正負(fù)验夯,然后輸出猖吴,注意末尾沒有空格這些細(xì)節(jié)。
完整代碼如下:
package www.zhejiang.test04;
import java.util.Scanner;
/**
* @創(chuàng)建人 wuzengyu
* @創(chuàng)建時間 2019/10/17
* @描述
*/
public class Transfer {
public static void main(String[] args) {
int num;
int count = 0;
int[] number = new int[6];
Scanner sc = new Scanner(System.in);
// 接受正確范圍數(shù)字
while(true)
{
num = sc.nextInt();
if (num >= -100000 && num <= 100000)
{
break;
}
}
// 副本
int copyNum = num;
// 得到位數(shù)
while (true)
{
if (copyNum < 0)
{
copyNum = -copyNum;
}
int digit = copyNum % 10; // 個位
number[count] = digit;
count++;
if (copyNum >=0&©Num <=9)
{
break;
}
copyNum = copyNum / 10;
}
if (num < 0)
{
System.out.print("fu ");
}
String pinyin = "";
for (int i = count; i > 0;i--)
{
switch (number[i-1])
{
case 0:
pinyin = "ling"; break;
case 1:
pinyin = "yi"; break;
case 2:
pinyin = "er"; break;
case 3:
pinyin = "san"; break;
case 4:
pinyin = "si"; break;
case 5:
pinyin = "wu"; break;
case 6:
pinyin = "liu"; break;
case 7:
pinyin = "qi"; break;
case 8:
pinyin = "ba"; break;
case 9:
pinyin = "jiu"; break;
}
if (i != 1)
{
System.out.print(pinyin + " ");
}
else if (i == 1)
{
System.out.print(pinyin);
}
}
}
}
運行結(jié)果如下:
負(fù)數(shù):
正數(shù):
個人感覺代碼寫得多了簿姨,但又沒有更好的解決思路距误,如果大家有更好的解決方法,歡迎指教~