首页 > 编程语言 >团体程序设计天梯赛-练习集——L1-007 念数字

团体程序设计天梯赛-练习集——L1-007 念数字

时间:2025-01-16 22:00:11浏览次数:3  
标签:case 输出 int L1 break num 007 天梯 printf

前言

这道题价值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

相关文章

  • [NOI2007] 货币兑换
    前言想起之前一道叫股票的题,也是这么长的题面,不过事已至此,先读题吧最近这么菜一定要记住每日一练和\(\rm{whk}\)啊思路首先直觉是比例不好处理,肯定是要转化的发现最后写了一句必然存在一种最优的买卖方案满足:每次买进操作使用完所有的人民币,每次卖出操作卖出......
  • L1-002 打印沙漏
    题目:L1-002打印沙漏-团体程序设计天梯赛-练习集题目要求本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印:*****************所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小......
  • ch32L103_EVT_定时器TIM1
    参考博文:https://www.cnblogs.com/liaigu/p/17782198.html在CH32L103EVT开发板的范例TIM_INT中,TIM1_INT_Init函数需要适当修改。1主频96MHz,计数时钟预分频器(TIM1_PSC)为16位,取值0~65535,对应TIM_Prescaler。2TIM_RepetitionCounter对应重复计数值寄存器(TIM1_RPTCR)示例中初......
  • [NOI2007] 货币兑换
    前言想起之前一道叫股票的题,也是这么长的题面,不过事已至此,先读题吧最近这么菜一定要记住每日一练和\(\rm{whk}\)啊思路首先直觉是比例不好处理,肯定是要转化的发现最后写了一句必然存在一种最优的买卖方案满足:每次买进操作使用完所有的人民币,每次卖出操作卖出......
  • 团体程序设计天梯赛-练习集——L1-003 个位数统计
    前言这道题乍一看感觉怪怪的,然后仔细看看,就会发现没那么难,一起来看一下吧L1-003个位数统计输入格式:每个输入包含1个测试用例,即一个不超过1000位的正整数N。输出格式:对N中每一种不同的个位数字,以D:M的格式在一行中输出该位数字D及其在N中出现的次数M。......
  • PTA 团体程序设计天梯赛 15分题 048
    L1-048矩阵A乘以B(15)题目要求给定两个矩阵A和B,要求你计算它们的乘积矩阵AB。需要注意的是,只有规模匹配的矩阵才可以相乘。即若A有Ra​行、Ca​列,B有Rb​行、Cb​列,则只有Ca​与Rb​相等时,两个矩阵才能相乘。输入格式输入先后给出两个矩阵A和B。对于每个矩阵,首先在一行中......
  • P4053 [JSOI2007] 建筑抢修
    题意:n个房子要修理,每个房子有修理时间和限制时间,如果在限制时间内房子没有修理好就报废了,问最多修理好几个房子。我们贪心的先修限制时间小的,并用一个大根堆存修理时间,如果遇到一个房子修理不了,尝试和之前修理过的房子中修理时间最长的换,这样可以减少总时长,并且也合法,因为换了之......
  • 活动报名:Voice Agent+硬件分享会,深圳专场丨RTE Meetup 007
      一同探索语音驱动的下一代人机交互界面,voiceagentbuilder的小规模深度交流会。2025年第一期RTEMeetup,将落地硬件之都深圳。1月18日周六下午,聚焦「VoiceAgent+硬件」主题,RTE开发者社区诚邀开发者和创业者共同参与。同时,我们也提供了线上直播和提问交流的......
  • [ZJOI2007] 仓库建设
    前言这些题全部口胡,到李超线段树了再打代码好累啊,昨晚上不该太晚睡的,中午他们期末也没睡,精神萎靡思路先简化一下题意对于\(n\)个点,第\(i\)个点所在的位置为\(x_i\),其有\(p_i\)个物品,在\(i\)点建立仓库的费用为\(c_i\),求建造仓库的点集\(\mathb......
  • PTA 团体程序设计天梯赛 15分题 044
    L1-044稳赢(15)题目要求大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:现要求你编写一个稳赢不输的程序,根据对方的出招,给出对应的赢招。但是!为了不让对方输得太惨,你需要每隔K次就让一个平局。输入格式输入首先在第一行给出正整数K(≤10),即平局间隔......