我正在执行一项任务(来自教科书),该任务应该计算两个日期之间经过的天数。我无法弄清楚公式末尾的天数是如何计算出来的。根据教科书的例子,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.
此外,该公式是如何推导出来的?
答案 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;
}