第10六周项目4 - 日期结构体(生日相差几天)

第十六周项目4 - 日期结构体(生日相差几天)

定义一个结构体变量(包括年、月、日),输入两个人的生日,求出他们相差多少天。

/*
* Copyright (c) 2014,烟台大学计算机学院
* All right reserved.
* 作者:邵帅
* 文件:demo.cpp
* 完成时间:2014年12月17日
* 版本号:v1.0
*/
#include <iostream>
using namespace std;
struct Date
{
    int year;
    int month;
    int day;
};
bool year(int y);
int main()
{
    int day(int y, int m, int d);
    Date date;
    int days_1,days_2,days;
    int n,allday1,allday2;
    cout<<"请输入第一个人的 year,month,day:";
    cin>>date.year>>date.month>>date.day;
    allday1=day(date.year, date.month, date.day);
    cout<<"请输入第二个人的 year,month,day:";
    cin>>date.year>>date.month>>date.day;
    allday2=day(date.year, date.month, date.day);
    days=allday1-allday2;
    if (days<0)
        days=-days;
    cout<<"他们相差"<<days<<"天。";
    return 0;
}
int day(int y, int m, int d)
{
    int sum;
    int i=1,alldays=0;
    while (i<=y)
    {
        if (year(i))
            alldays+=366;
        else
            alldays+=365;
        i++;
    }
    switch (m)
    {
    case 1:
        sum = d;
        break;
    case 2:
        sum = d + 31;
        break;
    case 3:
        sum =  d + 59;
        break;
    case 4:
        sum =  d + 90;
        break;
    case 5:
        sum = d + 120;
        break;
    case 6:
        sum =  d + 151;
        break;
    case 7:
        sum =  d + 181;
        break;
    case 8:
        sum =  d + 212;
        break;
    case 9:
        sum =  d + 243;
        break;
    case 10:
        sum =  d + 273;
        break;
    case 11:
        sum = d + 304;
        break;
    case 12:
        sum =  d + 334;
        break;
    }
    if (year(y))
    {
        if (m>2)
            sum--;
    }
    alldays+=sum;
    return alldays;
}
bool year(int y)
{
    if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0 && y % 100 == 0))
        return true;
    else
        return false;
}
运行结果:

第10六周项目4 - 日期结构体(生日相差几天)


第一次提交时的代码有点问题,只能计算同年或者相差一年的时间差,一开始想与格林威治标准时间:1970年1月1日做对比,还是失败。后来想出来一个方法:算出他们与1年1月1日的天数再相减,虽然效率很低,但是实在是想不到更好的方法,等待解决。


@ Mayuko