Leng_Mo 发表于 2021-9-7 22:04:26

作业求助

为什么我的结果会多出来3天?

#include<stdio.h>
#include<stdbool.h>
int main()
{

        int s_year,s_month,s_day,e_year,e_month,e_day;
        printf("请问您老贵庚啊?(格式xxxx-xx-xx)");
        scanf("%d-%d-%d",&s_year,&s_month,&s_day);
        printf("今个是何年何月何日啊?(格式xxxx-xx-xx)");
        scanf("%d-%d-%d",&e_year,&e_month,&e_day);
       
        int n;
        n=e_year-s_year+1;
        int y;//判断年数
       
        y=s_year;
        for(int i=1;i<n;i++)
        {
                y=y+1;
        }
       
        //判断出生年剩余天数
        int month_day={31,28,31,30,31,30,31,31,30,31,30,31};
        int all_s_year_day=365;
    if(s_year%4==0)
                {
                        if(s_year%100==0&&s_year%400!=0)
                        { }
                        else
                        {
                                month_day=29;
                                all_s_year_day=366;
                        }
                }
        int s_year_day=0,e_year_day=0;
        for(int i=0;i<s_month-1;i++)
        {
                s_year_day+=month_day;
        }
        s_year_day+=s_day;
        s_year_day=all_s_year_day-s_year_day;
       
        //判断今年已经过的天数
    month_day=28;
        if(e_year%4==0)
                {
                        if(e_year%100==0&&e_year%400!=0)
                        { }
                        else
                        {
                                month_day=29;
                        }
                }
        for(int i=0;i<e_month-1;i++)
        {
                e_year_day+=month_day;
        }
        e_year_day+=e_day;
       
        //判断除去今年和出生年闰年的天数
        int leap_year=0;
        for(int i=0;i<e_year-s_year-1;i++)
        {
                if(y%4==0)
                {
                        if(y%100==0&&y%400!=0)
                        { }
                        else
                        {
                                leap_year++;
                        }
                }
        }
       
        //计算总天数
        int all;
        all=s_year_day+e_year_day+365*(e_year-s_year-1)+leap_year;
        printf("您已经来到人间的天数:%d天",all);
       
        return 0;
}

blahblahfc 发表于 2021-9-8 01:43:27

一个明显的错误是第31、44、51行二月份的下标应该是1: month_day 改为 month_day。
第62行感觉 i<e_year-s_year-1; 应该不用 -1,之前第16行是 y 到 y。
还有一点是你把出生当天也算1天,这就多了1天。其它可能还有些小问题,大概是关于闰年的处理,就没仔细看了。

Leng_Mo 发表于 2021-9-8 09:59:38

blahblahfc 发表于 2021-9-8 01:43
一个明显的错误是第31、44、51行二月份的下标应该是1: month_day 改为 month_day。
第62行感觉 i

为什么不用减一?总年数减2不就是去掉今年和出生年的年数吗?计算今年剩余天数的时候我用今年的总天数减去今年已经过去的天数,应该没有把出生那一天算上吧,还请大佬多多指点

blahblahfc 发表于 2021-9-8 12:03:31

计算今年剩余天数的时候我用今年的总天数减去今年已经过去的天数,应该没有把出生那一天算上吧
又重新看了一遍代码,之前理解错了,你是对的

为什么不用减一?总年数减2不就是去掉今年和出生年的年数吗?
如果这样来算中间的润年数,好像下标有点问题,应该是从 y 到 y 即:
for(int i=1;i<e_year-s_year;i++)
这里还要考虑出生年份和今年年份之差为1年或相等时的处理。

第77行
+365*(e_year-s_year-1)
还要考虑出生年份和今年年份相等且是润年时,上式应为 -366
页: [1]
查看完整版本: 作业求助