输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出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>
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;
}
运行结果