用于计算已用天数的公式

时间:2015-10-08 13:33:20

标签: c structure

我正在执行一项任务(来自教科书),该任务应该计算两个日期之间经过的天数。我无法弄清楚公式末尾的天数是如何计算出来的。根据教科书的例子,2004年8月8日至2005年2月22日期间有202天,基于以下公式:

N=1461 * f(year,month)/4 + 153 * g(month)/5 + day,
where f(year, month) = year -1 if month <=2
                       year    otherwise
and g(month) = month + 13      if month <= 2
               month + 1       otherwise

但没有迹象表明如何计算最后一个变量&#39; day&#39;。在上面的例子中,最后一个变量是&#39; day&#39; N1等于3,N2为21。

  

这些数字来自哪里?

N1 = (1461 * 2004) / 4 + (153 * 9)/5 + 3,
N2 = (1461 * 2004) / 4 + (153 * 15)/5 + 21.
  

此外,该公式是如何推导出来的?

1 个答案:

答案 0 :(得分:0)

我已根据公式编写了这个小程序,但我仍然无法弄清楚如何计算天数(在公式data.day的末尾):

// Program to compute the number of elapsed days

#include <stdio.h>

struct date
{
    int month;
    int day;
    int year;
};

int number_of_days (struct date data);

int main (void)
{
    int number1, number2;
    struct date data1;
    struct date data2;

    printf ("Please, enter two dates (mm dd yyyy)");
    scanf  ("%i%i%i  %i%i%i", &data1.month, &data1.day, &data1.year, &data2.month, &data2.day, &data2.year);

    number1 = number_of_days(data1);
    number2 = number_of_days(data2);

    printf("The number of elapsed days is %i\n", number2 - number1);

    return 0;
}

int number_of_days (struct date data)
{
    int number;

    if (data.month <= 2)
        number = (1461 * (data.year - 1)) / 4 + (153 * (data.month + 13)) / 5 + data.day;
    else
        number = (1461 * data.year) / 4 + (153 * (data.month + 1)) / 5 + data.day;

    return number;
}