试题 历届真题 时间显示【第十二届】【省赛】【B组】C++代码

 

 总结:先统一时间单位,我是做的秒,其他的除了毫秒和秒,要考虑误差问题,简单的就秒或毫秒;先减去整年的秒数,再减去一个月的秒数,再减去一天的秒数,剩下的就是不满一天二十四小时的秒数,然后再进行时、分、秒分别输出;要注意,如果需要输出年月日,那么闰年判断就是重点!必不可少!当然本题只要求输出时、分、秒就行了,因此不考虑闰年也可以。该代码也提供了输出年,月,日的接口,较为全面,需要的自取;

#include<iostream>
using namespace std;
 
int main()
{
	long long time, x, day1, day, day2, day3;
	int month, i, count, count1, hh, mm, ss;
	cin>>time;
	time=time/1000;
	//先减去整年 
	for(int i=1970; ;i++)
	{
		if(i%4==0&&i%100!=0||i%400==0)//判断是否是闰年 
		{
			x=366*24*60*60;//是闰年则为366天 
		}
		else
		{
			x=365*24*60*60;//不是闰年则为365天 
		}
		count=i;//这里记录了哪一年 如果需要 输出count-1就是需要输出的年份 但题目没有要求 这里提供了接口 
		if(x>time)//判断是否够一个年,如果不够则结束循环 
		{
			break;
		}
		time=time-x;
	} 
	//再减去整月 
	for(month=1; ;month++)
	{
		if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
		{//当月份为1、3、5、7、8、10、12时,一个月有31天 
			day=31*24*60*60;
		}
		else if(month==2)
		{
			if(count%4==0&&count%100!=0||count%400==0)
			{//注意这里要分是否为闰年!!! (是闰年:二月为29天;不是闰年:二月为28天) 
				day=29*24*60*60;
			}
			else
			{
				day=28*24*60*60;
			}
		}
		else
		{//当月份为4、6、9、11时,一个月有30天 
			day=30*24*60*60;
		}
		count1=month;//这里记录了哪一月 如果需要 输出count1-1就是需要输出的月份 但题目没有要求 这里提供了接口 
		if(day>time)
		{
			break;
		}
		time=time-day;
	}
	//再减去整日 
	for(i=0; ;i++)
	{
		day1=24*60*60;
		if(time<day1)
		{
			break;
		}
		time=time-day1;
	}
	//输出小时
	for(i=0; ;i++)
	{
		day2=60*60;
		hh = i;
		if(time<day2)
		{
			break;
		}
		time=time-day2;
	} 
	//输出分钟
	for(i=0; ;i++)
	{
		day3=60;
		mm = i;
		if(time<day3)
		{
			break;
		}
		time=time-day3;
	} 
	printf("%02d:%02d:%02d", hh, mm, time);//不足两位时补前导0 例:%0md 以宽度m输出整型数,不足m时,左补零
	return 0;
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值