报时助手(C语言)

【问题描述】

给定当前的时间,请用英文的读法将他读出来。

时间用时h和分m表示,在英文的读法中,读一个时间的方法是:

如果m为0,则将时读出来,然后加上“o'clock”,如3:00读作“three o'clock”。

如果m不为0,则将时读出来,然后将分读出来,如5:30读作“five thirty”。

时和分的读法使用的是英文数字的读法,其中0~20读作:

0:zero,1:one,2:two,3:three,4:four,5:five,6:six,7:seven;8:eight,9:nine;10:ten;11:eleven,12:twelve

13:thirteen,14:fourteen,15:fifteen,16:sixteen,17:seventeen,18:eighteen,19:nineteen,20:twenty。

30读作thirty,40读作forty,50读作fifty。

对于大于20小于60的数字,首先读整十的数,然后再加上个位数。如31首先读30再加1的读法,读作“thirty one”。

按上面的规则21.54读作“twenty one fifth four”,9:07读作“nine seven”,0:15读作“zero fifteen”。

【输入格式】

输入包含两个非负整数h和m,表示时间的时和分。非零的数字前没有前导0。h小于24,m小于60。

【输出格式】

输出时间时刻的英文。

【样例输入】

0 15

【样例输出】

zero fifteen

【思路分析】

先看时0<=h<=23,0到20都是特殊情况,采用switch;21,22,23为一般情况,但是数量太少,没有必要对这三个在进行分析,也放到switch中;

对于分0<=m<=59,当0<=m<=19对于这些特殊数字采用switch,对于20<=m<=59这些数字,采取先输出十位数的大小,在输出个位数的大小。下面详见代码。

#include<stdio.h>
int main(){
	int h,m;
	scanf("%d %d",&h,&m);
	int m1;        //代表分m的十位数
	switch(h){
		case 0:printf("zero ");
		break;
		case 1:printf("one ");
		break;
		case 2:printf("two ");
		break;
		case 3:printf("three ");
		break;
		case 4:printf("four ");
		break;
		case 5:printf("five ");
		break;
		case 6:printf("six ");
		break;
		case 7:printf("seven ");
		break;
		case 8:printf("eight ");
		break;
		case 9:printf("nine ");
		break;
		case 10:printf("ten ");
		break;
		case 11:printf("eleven ");
		break;
		case 12:printf("twelve ");
		break;
		case 13:printf("thirteen ");
		break;
		case 14:printf("fourteen ");
		break;
		case 15:printf("fifteen ");
		break;
		case 16:printf("sixteen ");
		break;
		case 17:printf("seventeen ");
		break;
		case 18:printf("eighteen ");
		break;
		case 19:printf("nineteen ");
		break;
		case 20:printf("twenty ");
		break;
		case 21:printf("twenty one ");
		break;
		case 22:printf("twenty two ");
		break;
		case 23:printf("twenty three ");
		break;
	}
	if(m==0){
		printf("o'clock");
	}else{
		if(m<20){
	switch(m){
		case 0:printf("zero");
		break;
		case 1:printf("one");
		break;
		case 2:printf("two");
		break;
		case 3:printf("three");
		break;
		case 4:printf("four");
		break;
		case 5:printf("five");
		break;
		case 6:printf("six");
		break;
		case 7:printf("seven");
		break;
		case 8:printf("eight");
		break;
		case 9:printf("nine");
		break;
		case 10:printf("ten");
		break;
		case 11:printf("eleven");
		break;
		case 12:printf("twelve");
		break;
		case 13:printf("thirteen");
		break;
		case 14:printf("fourteen");
		break;
		case 15:printf("fifteen");
		break;
		case 16:printf("sixteen");
		break;
		case 17:printf("seventeen");
		break;
		case 18:printf("eighteen");
		break;
		case 19:printf("nineteen");
		break;
	}
	}else{
		m1=(m-m%10);
		m%=10;
		switch(m1){
			case 20:printf("twenty");
			break;
			case 30:printf("thirty");
			break;
			case 40:printf("forty");
			break;
			case 50:printf("fifty");
			break;
		}
		switch(m){
			case 1:printf(" one");
			break;
			case 2:printf(" two");
			break;
			case 3:printf(" three");
			break;
			case 4:printf(" four");
			break;
			case 5:printf(" five");
			break;
			case 6:printf(" six");
			break;
			case 7:printf(" seven");
			break;
			case 8:printf(" eight");
			break;
			case 9:printf(" nine");
			break;
		}
	}
	}
	return 0;
} 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

零维展开智子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值