程序员杂志07年12月算法擂台时间表达的解答

 

/*
英文口语表达时间有如下6种句型:

It is five past seven.(7点5分)

It is eleven to ten.(9点49分)

It is half past nine.(9点30分)

It is a quarter past eight.(8点15分)

It is a quarter to ten.(9点45分)

It is three o'clock.(3点)

请根据输入的时间,输出相应的英文表达。

程序从键盘输入多行数据,每一行为两个非负整数A和B,其中0<=A<13,0<=B<60,分别表示小时数和分钟数。

如果输入的某一行为0 0,则表示输入已结束。程序输出要求:对于输入的每一行(最后的0 0行除外),

输出相应的时间表达字符串,要求为上面6种句型之一。


输入输出样例如下:

样例输入:

8 21
12 45
5 0
0 30
0 0

样例输出:

It is twenty-one past eight.
It is a quarter to thirteen.
It is five o'clock.
It is half pass zero.
*/


#include 
< stdio.h >
#include 
< string .h >

char  engMinute[ 20 ];

char   * convertHour(  int  hour )
{
    
char *engHour[14];

    engHour[
0]="zero";
    engHour[
1]="one";
    engHour[
2]="two";
    engHour[
3]="three";
    engHour[
4]="four";
    engHour[
5]="five";
    engHour[
6]="six";
    engHour[
7]="seven";
    engHour[
8]="eight";
    engHour[
9]="nine";
    engHour[
10]="ten";
    engHour[
11]="eleven";
    engHour[
12]="twelve";
    engHour[
13]="zero";

    
return engHour[hour];
}


char   * convertMinute(  int  minute )
{
    
char *singleNum[10];
    
char *doubleNum[10];
    
char *integerNum[6];

    
if45<minute )
        minute
=60 - minute;

    singleNum[
1]="one";
    singleNum[
2]="two";
    singleNum[
3]="three";
    singleNum[
4]="four";
    singleNum[
5]="five";
    singleNum[
6]="six";
    singleNum[
7]="seven";
    singleNum[
8]="eight";
    singleNum[
9]="nine";

    doubleNum[
0]="ten";
    doubleNum[
1]="eleven";
    doubleNum[
2]="twelve";
    doubleNum[
3]="thirteen";
    doubleNum[
4]="fourteen";
    doubleNum[
5]="fifteen";
    doubleNum[
6]="sixteen";
    doubleNum[
7]="seventeen";
    doubleNum[
8]="eighteen";
    doubleNum[
9]="nineteen";

    integerNum[
2]="twenty";
    integerNum[
3]="thirty";
    integerNum[
4]="forty";
    integerNum[
5]="fifty";

    
if1<=minute && 9>=minute )
        strcpy( engMinute, singleNum[minute] );

    
else if10<=minute && 19>=minute )
        strcpy( engMinute, doubleNum[minute
%10] );

    
else if20==minute )
        strcpy( engMinute, integerNum[minute
/10] );

    
else if30==minute )
        strcpy( engMinute, integerNum[minute
/10] );

    
else if40==minute )
        strcpy( engMinute, integerNum[minute
/10] );

    
else if50==minute )
        strcpy( engMinute, integerNum[minute
/10] );

    
else
    
{
        strcpy( engMinute, integerNum[minute
/10] );
        strcat( engMinute, 
"-" );
        strcat( engMinute, singleNum[minute
%10] );
    }


    
return engMinute;
}


void  main(  void  )
{
    
int hour;
    
int minute;
    
    
do
    
{
        printf( 
"Please input the time: " );
        scanf( 
"%d%d"&hour, &minute );

        
if!0<=hour && 13>hour && 0<=minute && 60>minute ) )
        
{
            printf( 
" Input error! Please input again. " );
            
continue;
        }

        
        
if0==hour && 0==minute )
            
break;

        printf( 
"It is " );

        
if0==minute )
            printf( 
"%s o'clock. ", convertHour( hour ) );

        
else if15==minute )
            printf( 
"a quarter past %s. ", convertHour( hour ) );

        
else if30==minute )
            printf( 
"half past %s. ", convertHour( hour ) );

        
else if45==minute )
            printf( 
"a quarter to %s. ", convertHour( hour+1 ) );

        
else if45>minute )
            printf( 
"%s past %s. ", convertMinute( minute ), convertHour( hour ) );

        
else if45<minute )
            printf( 
"%s to %s. ", convertMinute( minute ), convertHour( hour+1 ) );
    }

    
while( hour!=0 || minute!=0 );
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值