输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu
字。十个数字对应的拼音如下:
0: ling
1: yi
2: er
3: san
4: si
5: wu
6: liu
7: qi
8: ba
9: jiu
输入格式:
输入在一行中给出一个整数,如:1234
。
提示:整数包括负数、零和正数。
输出格式:
在一行中输出这个整数对应的拼音,每个数字的拼音之间用空格分开,行末没有最后的空格。如 yi er san si
。
输入样例:
-600
结尾无空行
输出样例:
fu liu ling ling
结尾无空行
整体思路:
要将输入的数字一位一位拆开放在数组里,引入一个参数存储位数,再用switch语句与数组内容一一对应即可。负数和正数处理方法是一样的,把负数变成正数,再用一个参数专门控制符号,数组第一个元素与其对应。
整体代码:
#include <stdio.h> #include <math.h> int main (void){ int input = 0; scanf ("%d",&input); int i = 0,ne = 10,wei = 0; int a[100] = {0}; if (input == 0){ printf ("ling"); return 0; } if (input < 0){ input = input * -1; ne = -1; } for (i = 0; i < 13; ++i){ if ((input >= pow(10,i)) && (input < pow(10,i+1))) wei = i + 1; } for (i = 1; i <= wei; ++i){ a [i] = input / pow(10,wei-i); input = input - a[i] * pow(10,wei-i); } a[0] = ne; for (i = 0;i < wei; ++i) { switch (a[i]){ case -1: printf ("fu "); break; case 0: printf ("ling "); break; case 1: printf ("yi "); break; case 2: printf ("er "); break; case 3: printf ("san "); break; case 4: printf ("si "); break; case 5: printf ("wu "); break; case 6: printf ("liu "); break; case 7: printf ("qi "); break; case 8: printf ("ba "); break; case 9: printf ("jiu "); break; case 10: break; } } switch (a[wei]){ case -1: printf ("fu"); break; case 0: printf ("ling"); break; case 1: printf ("yi"); break; case 2: printf ("er"); break; case 3: printf ("san"); break; case 4: printf ("si"); break; case 5: printf ("wu"); break; case 6: printf ("liu"); break; case 7: printf ("qi"); break; case 8: printf ("ba"); break; case 9: printf ("jiu"); break; case 10: break; } return 0; }
讨论:
- 题目要求末尾不能出现空格,这里的处理方法是将前几位统一输出,末尾带上空格;最后一位单独处理,末尾不带空格,不知有无更好的处理方法。
- 0作为特殊情况,放在前半部分处理,碰到0输出完直接退出函数
- 出现case对应时,如果不写break,该case后面的所有case也会一起输出。
- 拆数字是一段很典型的代码,在很多题目中都能够用到。