7-7 念数字 (15 分)
输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出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
我的写法1
// 这个是我的第一种写法用的switch 写的特别长,没有多大参考价值
#include<stdio.h> int main(void) { int n, m; int i; char a[20]; scanf ("%d", &n); int flag = 0; if (n < 0) { flag = 1; n *= -1; } m = n; for (i = 0; n != 0; i++) { a[i] = n % 10; n /= 10; } i -= 1; if (flag) { printf ("fu "); } if (!m) { printf ("ling"); } else { while (~i) { n = a[i]; i--; switch (n) { case 0 : printf ("ling"); m /= 10; if (m) { putchar (' '); } break; case 1 : printf ("yi"); m /= 10; if (m) { putchar (' '); } break; case 2 : printf ("er"); m /= 10; if (m) { putchar (' '); } break; case 3 : printf ("san"); m /= 10; if (m) { putchar (' '); } break; case 4 : printf ("si"); m /= 10; if (m) { putchar (' '); } break; case 5 : printf ("wu"); m /= 10; if (m) { putchar (' '); } break; case 6 : printf ("liu"); m /= 10; if (m) { putchar (' '); } break; case 7 : printf ("qi"); m /= 10; if (m) { putchar (' '); } break; case 8 : printf ("ba"); m /= 10; if (m) { putchar (' '); } break; case 9 : printf ("jiu"); m /= 10; if (m) { putchar (' '); } break; } } } putchar ('\n'); return 0; }
我的写法(改进版)
// 使用二维数组简化问题 #include <stdio.h> #include <string.h> int main() { int n, flag = 0, i = 0; char dig[10][8] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"}; char dig2[12][8]; scanf ("%d", &n); if (n < 0) { flag = 1; } if (flag) { printf ("fu "); n = -n; } if (n == 0) { printf("ling"); } while (n) { strcpy (dig2[i], dig[n % 10]); n /= 10; i++; } i -= 1; for (; i >= 0; --i) { printf ("%s", dig2[i]); if (i) { putchar (' '); } } return 0; }
运行结果