第三章(循环) 编程题 4
念整数
题目内容:
你的程序要读入一个整数,范围是[-100000,100000]。然后,用汉语拼音将这个整数的每一位输出出来。
如输入1234,则输出:
yi er san si
注意,每个字的拼音之间有一个空格,但是最后的字后面没有空格。当遇到负数时,在输出的开头加上“fu”,如-2341输出为:
fu er san si yi
输入格式:
一个整数,范围是[-100000,100000]。
输出格式:
表示这个整数的每一位数字的汉语拼音,每一位数字的拼音之间以空格分隔,末尾没有空格。
输入样例:
-30
输出样例:
fu san ling
难点分析:
本题有两个难点:
其一在于,计算机算数的时候,是从右往左算的,所以一般情况下念数字的时候,会把123念成321,因此本题第一个难点在于如何把计算机拧巴了的数给还原成正常的顺序;
其二在于,这个 负号和空格的控制;
难点一我的处理办法是,先把这个数每一位取出来,然后再倒过来,就是先把123取成数字1 2 3,然后进行 3*100+2*10+1*1=321,而后再按照一般方法把它读出来。但是这样的不严谨导致了这道题我只能拿到3分:对于20,2000等能被10整除的数,我无法按照这个办法将之倒过来,即20不能倒成02,200不能倒成002,这是整体思路的问题,限于脑子僵在这里了,所以只好就拿3分了……
难点二,借鉴了前面几道题的办法,设置了一个isfirst的标识,很好的解决了。
以下是代码:
1 import java.util.Scanner; 2 3 public class Main { 4 5 public static void main(String[] args) { 6 // TODO Auto-generated method stub 7 8 Scanner in = new Scanner(System.in); 9 10 11 int x = in.nextInt(); 12 in.close(); 13 14 boolean iszheng = true; 15 16 if ( x < 0){ 17 iszheng = false; 18 x = 0 - x; 19 } 20 if (x == 0){ 21 System.out.print("ling"); 22 } 23 24 boolean isfirst = true; 25 String nian = new String(""); 26 int m = 0; 27 28 while( x != 0){ 29 m = m * 10 + x % 10; 30 x = x / 10; 31 } 32 33 while ( m != 0 ){ 34 35 int x0 = m % 10; 36 m = m / 10; 37 switch (x0){ 38 case 0: 39 nian = "ling"; 40 break; 41 case 1: 42 nian = "yi"; 43 break; 44 case 2: 45 nian = "er"; 46 break; 47 case 3: 48 nian = "san"; 49 break; 50 case 4: 51 nian = "si"; 52 break; 53 case 5: 54 nian = "wu"; 55 break; 56 case 6: 57 nian = "liu"; 58 break; 59 case 7: 60 nian = "qi"; 61 break; 62 case 8: 63 nian = "ba"; 64 break; 65 case 9: 66 nian = "jiu"; 67 break; 68 } 69 70 if (isfirst){ 71 isfirst = false; 72 if (iszheng){ 73 System.out.print(nian); 74 } 75 else{ 76 System.out.print("fu " + nian); 77 } 78 } 79 else{ 80 System.out.print(" " + nian); 81 } 82 83 84 } 85 86 87 88 } 89 90 }