问题描述:
你的程序要读入一个整数,范围是[-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(" "); } } } }