第二周----玩日期

/*
* 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;
}




这个程序写了很长时间,不知道这个算法对不对,试了好多次才改成现在的样子,若有错误,还望指出.


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值