/*
* Copyright (c) 2013, 烟台大学计算机学院
* All rights reserved.
* 作 者:申玉迪
* 完成日期:2014 年 3 月 5 日
* 版 本 号:v1.0
* 问题描述:玩日期
*/
#include <iostream>
using namespace std;
struct Time
{
int year;
int month;
int day;
int hour;
int minute;
int second;
} time;
void tian()//该日是本年的第几天
{
int days=0,i,x;
for(i=0; i<time.month; ++i)
{
if(i==2)
{
if(time.year%400==0||(time.year%4==0&&time.year%100!=0))
{
x=29;
}
else
{
x=28;
}
}
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
x=31;
else if(i==4||i==6||i==9||i==11)
x=30;
else if(i==0)
x=time.day;
days=days+x;
}
cout<<"这是这一年的第"<<days<<"天."<<endl;
}
void miao()//这一秒是该日的第几秒
{
int second;
second=time.hour*3600+time.minute*60+time.second;
cout<<"这是这一天的第"<<second<<"秒。"<<endl;
}
void fun()//求这一秒是本年的第几秒
{
int days=0,i,x,second,S;//先算出该日是本年第几天和这一秒是本日的第几秒,然后就可以知道该秒是本年的第几秒了
for(i=0; i<time.month; ++i)
{
if(i==2)
{
if(time.year%400==0||(time.year%4==0&&time.year%100!=0))
{
x=29;
}
else
{
x=28;
}
}
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
x=31;
else if(i==4||i==6||i==9||i==11)
x=30;
else if(i==0)
x=time.day;
days=days+x;
}
second=time.hour*3600+time.minute*60+time.second;
S=(days-1)*24*60*60+second;
cout<<"这是这一年的第"<<S<<"秒"<<endl;
}
void wan()//输入d天后,是哪年哪月那日
{
int i,j,d,x,days=0,month=1,day;
cout<<"请输入天数:";
cin>>d;
for(i=0; i<time.month; ++i)
{
if(i==2)
{
if(time.year%400==0||(time.year%4==0&&time.year%100!=0))
{
x=29;
}
else
{
x=28;
}
}
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
x=31;
else if(i==4||i==6||i==9||i==11)
x=30;
else if(i==0)
x=time.day;
days+=x;
}
day=days+d; /*思想:看输入的日期是该年的第几天,然后加上d天后,在通过月份一点点减,月份
逢12,年份加一*/
while(day>=31)
{
for(j=2; j<=13; j++)
{
if(j==3)
{
if(time.year%400==0||(time.year%4==0&&time.year%100!=0))
{
x=29;
}
else
{
x=28;
}
}
if(j==2||j==4||j==6||j==8||j==9||j==11||j==13)
x=31;
else if(j==5||j==7||j==10||j==12)
x=30;
day=day-x;
if(day<=0)
{
month=j-1;
day=day+x;
break;
}
if(j==13)
{
month=1;
time.year++;
break;
}
}
}
cout<<time.year<<"年"<<month<<"月"<<day<<"日"<<endl;
}
void bian()//输入s秒后,是何日何时
{
int sec,s1;
cout<<"请输入秒数:";
cin>>s1;
sec=s1+time.second;//方法同上
while(sec>=60)
{
time.minute++;
sec-=60;
if(time.minute==60)
{
time.hour++;
time.minute=0;
}
if(time.hour==24)
{
time.day++;
time.hour=0;
}
if((time.month==1||time.month==3||time.month==5||time.month==7||time.month==8||time.month==10||time.month==12)&&time.day>31)
{
time.month++;
time.day=1;
}
if((time.month==4||time.month==6||time.month==9||time.month==11)&&time.day>30)
{
time.month++;
time.day=1;
}
if(time.month==2)
{
if(((time.year%400==0)||(time.year%4==0&&time.year%100!=0))&&time.day>29)
{
time.month++;
time.day=1;
}
if(time.day>28)
{
time.month++;
time.day=1;
}
}
if(time.month>12)
{
time.year++;
time.month=1;
}
}
cout<<time.year<<"年"<<time.month<<"月"<<time.day<<"日"<<time.hour<<"时"<<time.minute<<"分"<<sec<<"秒"<<endl;
}
int main()
{
cout<<"请输入一个时间:";
while(1)
{
cin>>time.year>>time.month>>time.day>>time.hour>>time.minute>>time.second;
if(time.second<=60&&time.month<=12&&time.hour<24&&time.minute<60)
{
break;
}
cout<<"对不起,您输入的时间有误,请重新输入:";
}
tian();
miao();
fun();
wan();
bian();
return 0;
}
这个程序写了很长时间,不知道这个算法对不对,试了好多次才改成现在的样子,若有错误,还望指出.