我有一个C ++项目,其最终目标是为任何月份和年份创建日历。项目的一部分要求我首先计算从0000年1月1日到任何指定日期的天数。该函数必须使用三个参数,表示年,月和日。我是C ++的新手,所以如果有一些错误使用的命令或逻辑,请给我一些懈怠。到目前为止,这就是我所拥有的,但是当我测试它时,数字已经过了几天。有人可以告诉我我的代码出错了吗?
int const day_of_forever(int const year, int const month, int const day)
{
int count[]={0,31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365};
if ((year % 400==0) && (year % 100 != 0) && (year % 4 == 0 )&& (month>=2))
((count[month-1]+day)+1);
return (count[month-1]+day)+(((year)*365)+1) +((year)/4)-(year/100)+(year/400);
}
void main()
{
int const year=2000;
int const day=1;
int const month=1;
int const something=day_of_forever(year,month,day);
print (something);
}
答案 0 :(得分:5)
您的问题陈述定义不明确。你不能只说'#34;任何指定的日期"因为许多日期是不明确的,因为在不同时间在不同地方使用的各种日历。也许你应该坚持1800年后的日期,以保持可管理性。
无论如何,如果您正在尝试实施proleptic Gregorian calendar:
您不会考虑Calendar Act of 1752。
您的if
声明没有做任何事情,它只是将某事物加1并将其扔掉。
闰年测试中的逻辑是错误的。它说闰年必须是零模400和其他一些东西。但是大多数leap years不是零mod 400。
+ - +
声明末尾的return
逻辑并未考虑日期是在闰日之前还是之后。
您不会考虑朱利安leap days not in the proleptic格里高利历。您可能需要也可能不需要,具体取决于您的输入日期的定义方式。
没有零年。所以1月1日0000从未发生过。
答案 1 :(得分:1)
您的闰年测试应该类似
if( (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) && month >= 2)
分享并享受。