念整数(5分)
题目内容:
你的程序要读入一个整数,范围是[-100000,100000]。然后,用汉语拼音将这个整数的每一位输出出来。
如输入1234,则输出:
yi er san si
注意,每个字的拼音之间有一个空格,但是最后的字后面没有空格。当遇到负数时,在输出的开头加上“fu”,如-2341输出为:
fu er san si yi
输入格式:
一个整数,范围是[-100000,100000]。
输出格式:
表示这个整数的每一位数字的汉语拼音,每一位数字的拼音之间以空格分隔,末尾没有空格。
输入样例:
-30
输出样例:
fu san ling
#include <stdio.h>
int main()
{
int A,x;
scanf("%d", &x);
if (x<0) //小于零,取负且打印“fu ”
{
x = -x;
printf("fu ");
}
int mask = 1;
int t = x; //不影响到后面do-while循环
while (t>9) //计算x对应的位数mask。 eg:12345对应10000
{
t /= 10;
mask *= 10;
}
do{
A = x/mask;
switch (A)
{
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(0):printf("ling");break;
}
if (mask>1) //注意这里是mask,而不是x;
{
printf(" ");
}
x %= mask;
mask /= 10;
}while(mask>0); //注意这里是mask,而不是x;
return 0;
}
取每个位置上的数,用到下面的算法:
13425/10000 -> 1 //第一位
13425%10000 -> 3425
10000/10 -> 1000
3425/1000 -> 3 //第二位
3425%1000 -> 425
1000/10 -> 100
425/100 -> 4 //第三位
425%100 -> 25
100/10 -> 10
25/10 -> 2 //第四位
25%10 -> 5
10/10 -> 1
5/1 -> 5 //第五位
5%1 -> 0
1/10 ->0
网友评论