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