输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出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
整体思路就是:输入数字,通过数字对应二维数组里的拼音,将其正序输出。
而正序输出的思路是:先得到一个数m,这个数m是输入数n的总位数(假设输入数n是54321,则这个数m是10000),用n除以这个数m,得到的就是输入数n的最大位。同时每循环一次,n去掉最高位,m除以10,这样就能正序输出每一位了。
#include <stdio.h>
int main()
{
char a[10][5]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"}; //定义一个二维数组,每行分别存储各个数字的拼音
int n,t; //同时还满足了数字几对应的就是几的拼音,如a[0]对应的就是'ling'
scanf("%d",&n); //输入数字
if(n<0){
printf("fu ");
n=-n; //如果是负数先化为正数,并输出“fu”加空格
}
t=n;
int mask=1,d;
while(t>9){
t/=10;
mask*=10; //通过循环得到输入数的总位数
}
while(mask>0){
d=n/mask; //得到最高位数字
printf("%s",a[d]);//用数字对应每个拼音的位置,并输出
if(mask>9){ //如果mask<9,说明已经到了最后一位,不用再敲空格了
printf(" ");
}
n=n%mask; //每循环一次,输入数n消掉最左边那位数,同时mask也主动往下降一位
mask/=10;
}
return 0;
}