POJ2351 ZOJ1916 Time Zones

//4_7_5:	Time Zones 世界时区的转换	POJ2351 ZOJ1916
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char zone[32][5]={"UTC","GMT","BST","IST","WET","WEST","CET","CEST",
			 "EET","EEST","MSK","MSD","AST","ADT","NST","NDT",
			 "EST","EDT","CST","CDT","MST","MDT","PST","PDT",
			 "HST","AKST","AKDT","AEST","AEDT","ACST","ACDT","AWST"};
int hour_info[32] = {0,0,1,1,0,1,1,2,2,3,3,4,-4,-3,-3,-2,
				-5,-4,-6,-5,-7,-6,-8,-7,-10,-9,-8,10,11,9,10,8};
int minute_info[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,-30,-30,0,0,0,0,0,0,0,0,0,0,0,0,0,30,30,0};
int main()
{
	int i,N,zonea,zoneb,hour,minute;
	char time[10],apm[5],zoneA[5],zoneB[5];
	scanf("%d",&N);
	while(N--)
	{
		hour = 0;
		minute = 0;
		scanf("%s",time);
		if(time[0] <= '9')
		{
			scanf("%s%s%s",apm,zoneA,zoneB);
			i = 0;
			while(time[i] != ':')
			{
				hour = hour * 10 + (time[i] - '0');
				i++;
			}
			i ++;
			while(time[i])
			{
				minute = minute * 10 + (time[i] - '0');
				i++;
			}
			if(strcmp(apm,"a.m.") == 0 && hour == 12)		hour = 0;
			else if(strcmp(apm,"p.m.") == 0 && hour != 12)	hour = hour + 12;
		}
		else
		{
			scanf("%s%s",zoneA,zoneB);
			minute = 0;
			if(time[0] == 'n')	hour = 12;
			else				hour = 0;
		}
/***********到这里,时区被转化成了24小时进制************/
		for(i = 0;i < 32;i ++)
			if(strcmp(zone[i],zoneA) == 0)
			{
				zonea = i;
				break;
			}
		for(i = 0;i < 32;i ++)
			if(strcmp(zone[i],zoneB) == 0)
			{
				zoneb = i;
				break;
			}
		hour = hour + (hour_info[zoneb] - hour_info[zonea]);
		minute = minute + (minute_info[zoneb] - minute_info[zonea]);
		if(minute < 0)
		{
			hour -= 1;
			minute += 60;
		}
		else if(minute >= 60)
		{
			hour += 1;
			minute -= 60;
		}
		if(hour < 0)
			hour += 24;
		else if(hour >=24)
			hour -= 24;
/*************到这里小时和分钟都转化为了新的时区,而且是24小时制*************/
		if(hour == 12 && minute == 0)		printf("noon\n");
		else if(hour == 0 && minute == 0)	printf("midnight\n");
		else 
		{
			if(hour == 0)	printf("12:");
			else			printf("%d:",hour > 12 ? hour - 12 : hour);
			if(minute < 10)	printf("0%d ",minute);
			else			printf("%d ",minute);
			if(hour < 12)	printf("a.m.\n");
			else			printf("p.m.\n");
		}
	}
	return 0;
}
/*测试结果:通过POJ2351 ZOJ1916检测
4
noon HST CEST
midnight
11:29 a.m. EST GMT
4:29 p.m.
6:01 p.m. CST UTC
12:01 a.m.
12:40 p.m. ADT MSK
6:40 p.m.
请按任意键继续. . .
*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值