前言
这道题价值10分,题目不难,稍稍的有点逻辑,分值也不低,这种题拿下应该差不多
L1-007 念数字
输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出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)如果这个值是负数怎么给他转成正的输出
下面我们先解决第一个问题
输出每一位的数值,我们可以通过“%”与“/”做到输出每个位上面的数值,比如给出了一个数值是893,我们可以通过
int num = 893;
printf("%d",num/100);//输出百位数
printf("%d",num%100/10);//输出十位数
printf("%d",num%10);//输出个位数
大家可以发现上面的作法需要根据给出值的位数进行“%”和“/”运算,但是题目里面是一个未知值,这是一个要解决的新的问题,我们在计算的时候需要是“%”或“/”10的n次方,是一个指数,反过来,那不就是对数了,这里我们会用到一个新的函数
log10这样一个函数,比如这样
int num = 893;
int t;
t = (int)log10(num)+1;
这样我们就能得到我们需要求的数值的位数,在通过循环用“%”和“/”得出每一位的数值
下面解决第二个问题
负数情况下怎么办
我们可以直接判断是否为负数,也就是判断输入的值是否小于0,小于0的话,先输出一个ling加空格,然后把数干正了,这里我介绍两种方式
方式一:
int num = -893
num = 0-num;//num = num*(-1);
printf("%d",num);
方式二:
这里用到一个取绝对值的函数
abs,直接上代码更直接
int num = -893;
num = abs(num);
printf("%d",num);
以上就是这道题里面可能会比较难的问题,下面我们直接上代码
注:abs和log10函数调用的时候,一定要声明math头文件
代码
#include <stdio.h>
#include <math.h>
int main()
{
int num,i,t,count=0;
scanf("%d",&num);//输入数字
if(num == 0)//判断是否为0,是0的话输出,不是0的话跳过
{
printf("ling");
count++;
}else if(num<0){//判断是否小于0
printf("fu ");
num = abs(num);
}
t = (int)log10(num);//提取输入数字的位数
int number[t+1];//定义数组存放数字的每一位
if(count==0)//与上面的count一起,如果不为0的话进入这个判断
{
for(i = 0;i < t+1;i++ )//求得每一位,并存放到数组中
{
number[i] = num%10;
num /= 10;
}
for(i = 0;i < t+1;i++ )//输出结果
{
switch(number[t-i])//按位取
{
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;
}
if(i<t)printf(" ");//如果不是最后一个输出一个空格
}
}
}
以上所有代码均为自己编写,本人水平有限,如果有哪里出错或者有更好的解法可以与我私信或在评论区里进行讨论
标签:case,输出,int,L1,break,num,007,天梯,printf From: https://blog.csdn.net/shidisy/article/details/145192468