pta平台上的问题,求日数

img

img


y的数值太大了,总是运行超时。
无关//12334454322467754

这题是外星人老师出的吗
公元是从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日,刚好一年。
如有错误,欢迎指正。