問題描述:
你的程序要讀入一個整數,范圍是[-100000,100000]。然后,用漢語拼音將這個整數的每一位輸出出來。
如輸入1234,則輸出:
yi er san si
注意,每個字的拼音之間有一個空格,但是最后的字后面沒有空格。當遇到負數時,在輸出的開頭加上“fu”,如-2341輸出為:
fu er san si yi
輸入格式:
一個整數,范圍是[-100000,100000]。
輸出格式:
表示這個整數的每一位數字的漢語拼音,每一位數字的拼音之間以空格分隔,末尾沒有空格。
輸入樣例:
-30
輸出樣例:
fu san ling
時間限制:500ms內存限制:32000kb
錯誤代碼實現:
因為老師在授課過程中講過如何將一個數逆序輸出,所以一開始我想到的就是將輸入的數逆序,然后再循環取這個逆序數的個位數進行念整數操作。思路上感覺可行,但是卻忽略了極端情況,比如數字1230,對其逆序時數字為321,0卻消失了,因此再mooc上測試時有兩個用例未通過。
import java.util.Scanner; public class 念整數 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner in=new Scanner(System.in); int number=in.nextInt(); if(number==0) { System.out.print("ling"); } if(number<0) { System.out.print("fu "); number=-number; } int temp=number; int result=0; do { int digit=temp%10; temp=temp/10; result=result*10+digit; }while(temp!=0); // System.out.println(result); do { int digit=temp%10; temp=temp/10; result=result*10+digit; }while(temp!=0); // System.out.println(result); do { int digit1=result%10; result=result/10; switch(digit1) { case 1: System.out.print("yi"); break; case 2: System.out.print("er"); break; case 3: System.out.print("san"); break; case 4: System.out.print("si"); break; case 5: System.out.print("wu"); break; case 6: System.out.print("liu"); break; case 7: System.out.print("qi"); break; case 8: System.out.print("ba"); break; case 9: System.out.print("jiu"); break; } if(result>0) { System.out.print(" "); } }while(result!=0); } }
改進代碼:
import java.util.Scanner; public class 念整數改進 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner in=new Scanner(System.in); int cnt=0; int temp=0; double p=0.0; int number=in.nextInt(); if(number==0) //數字為0時 { System.out.print("ling"); } if(number<0) //數字為負時先輸出fu { System.out.print("fu "); number=-number;//將負值轉換為絕對值 } temp=number; while(temp>0) { temp/=10; cnt++; } while(cnt>0) { p=Math.pow(10,--cnt);//循環的條件,p等於10的cnt次方 int first=number/(int)p; number=number%(int)p; switch(first) { case 0: System.out.print("ling"); break; case 1: System.out.print("yi"); break; case 2: System.out.print("er"); break; case 3: System.out.print("san"); break; case 4: System.out.print("si"); break; case 5: System.out.print("wu"); break; case 6: System.out.print("liu"); break; case 7: System.out.print("qi"); break; case 8: System.out.print("ba"); break; case 9: System.out.print("jiu"); break; } if(cnt>0) { System.out.print(" "); } } } }