【问题描述】
输入一个整数,输出每个数字对应的拼音。
当整数为负数时,先输出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. 判断负号
2. 遍历 数所输入数字的位数(考虑输入0不满足遍历条件的情况)
3. 定义一个取输入数首位的工具
4. 循环遍历 分别取首位数字进行判断
代码如下:
#include <stdio.h>
int main(int argc, char *argv[])
{
int x, i, m, a;
int t = 0, n = 1;
scanf("%d", &x);
//判断负号
if (x < 0)
{
printf("fu ");
x = -x;
}
a = x;//之后x在遍历后变为0,故定义a保存原值
//数输入数字位数(考虑输入0的特殊情况)
if (x == 0)
{
t = 1;
}
while (x > 0)
{
x /= 10;
t++;
}
//定义n,作为之后取输入数首位的工具 ,遍历(位数-1)次
for (i=t; i>1; i--)
{
n *= 10;
}
//循环遍历
for (i=t; i>=1; i--)
{
m = a / n;//取首位数字
a %= n;
switch (m)
{
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;
}
n /= 10;
if (n != 0)
{
printf(" ");
}
}
return 0;
}
字符串数组方法:
#include <stdio.h>
int main(int argc, char *argv[])
{
char c;
c = getchar();
while (c!='\n')
{
if (c=='-') printf("fu");
else if (c=='0') printf("ling");
else if (c=='1') printf("yi");
else if (c=='2') printf("er");
else if (c=='3') printf("san");
else if (c=='4') printf("si");
else if (c=='5') printf("wu");
else if (c=='6') printf("liu");
else if (c=='7') printf("qi");
else if (c=='8') printf("ba");
else if (c=='9') printf("jiu");
c = getchar();
if (c!='\n') printf(" ");
}
return 0;
}