这题是外星人老师出的吗
公元是从1年开始的,根本没有0年啊
平年365天,闰年366天,只有今年没有过完需要加上月和日,前面直接(365x平年年数+366x闰年年数)=(365x年数+闰年年数)就行了,不要真的循环一天一天加呀,那能不超时?
#include <stdio.h>
#include <stdlib.h>
int main()
{
long long year, i, data = 0;
int month, day;
unsigned long cnt1, cnt2;
cnt1 = 0, cnt2 = 1;
printf("起始年月日为 0 年 1 月 1 日\n");
printf("请输入现在的年月日\n");
printf("规格是:0 <= year <= 10^12; 1 <= month <= 12; 0 <= day <= 31\n");
scanf("%lld", &year);
scanf("%d", &month);
scanf("%d", &day);
for(i = 1; i < year; i++)
{
if((i % 4 == 0) && (i % 100 != 0) || (i % 400 == 0))
cnt1 += 1;
else
cnt2 += 1;
}
data = (cnt1 * 366) + (cnt2 * 365);
if(month == 2) data += (day + 31);
if(2 < month)
{
if((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0))
data += 60;//加上了一月的31天
else data += 59;
for(char i = 1; i < month; i++)
{
if(i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12)
data += 31;
else if(i == 4 || i == 6 || i == 9 || i == 11)
data += 30;
}
}
if(month == 1) data += day;
//printf("%ld %ld\n", cnt1, cnt2);
printf("现在过的天数为 %lld\n",data );
return 0;
}
你可以跑一下,看下合不合格,然后再优化以下。
这真的是按题目从0年1月1日开始的,到1年1月1日,刚好一年。
如有错误,欢迎指正。