鱼C论坛

 找回密码
 立即注册
查看: 902|回复: 3

[已解决]作业求助

[复制链接]
发表于 2021-9-7 22:04:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
为什么我的结果会多出来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[n];//判断年数
        
        y[0]=s_year;
        for(int i=1;i<n;i++)
        {
                y[i]=y[i-1]+1; 
        } 
        
        //判断出生年剩余天数
        int month_day[12]={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[2]=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[i];
        }
        s_year_day+=s_day;
        s_year_day=all_s_year_day-s_year_day;
        
        //判断今年已经过的天数
    month_day[2]=28;
        if(e_year%4==0)
                {
                        if(e_year%100==0&&e_year%400!=0)
                        { }
                        else 
                        {
                                month_day[2]=29;
                        }
                }
        for(int i=0;i<e_month-1;i++)
        {
                e_year_day+=month_day[i];
        }
        e_year_day+=e_day;
        
        //判断除去今年和出生年闰年的天数
        int leap_year=0;
        for(int i=0;i<e_year-s_year-1;i++)
        {
                if(y[i]%4==0)
                {
                        if(y[i]%100==0&&y[i]%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;
}
最佳答案
2021-9-8 01:43:27
一个明显的错误是第31、44、51行二月份的下标应该是1: month_day[2] 改为 month_day[1]。
第62行感觉 i<e_year-s_year-1; 应该不用 -1,之前第16行是 y[0] 到 y[28]。
还有一点是你把出生当天也算1天,这就多了1天。其它可能还有些小问题,大概是关于闰年的处理,就没仔细看了。
QQ图片20210907212510.png
QQ图片20210907220252.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-8 01:43:27 | 显示全部楼层    本楼为最佳答案   
一个明显的错误是第31、44、51行二月份的下标应该是1: month_day[2] 改为 month_day[1]。
第62行感觉 i<e_year-s_year-1; 应该不用 -1,之前第16行是 y[0] 到 y[28]。
还有一点是你把出生当天也算1天,这就多了1天。其它可能还有些小问题,大概是关于闰年的处理,就没仔细看了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-8 09:59:38 | 显示全部楼层
blahblahfc 发表于 2021-9-8 01:43
一个明显的错误是第31、44、51行二月份的下标应该是1: month_day[2] 改为 month_day[1]。
第62行感觉 i

为什么不用减一?总年数减2不就是去掉今年和出生年的年数吗?计算今年剩余天数的时候我用今年的总天数减去今年已经过去的天数,应该没有把出生那一天算上吧,还请大佬多多指点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-8 12:03:31 | 显示全部楼层
计算今年剩余天数的时候我用今年的总天数减去今年已经过去的天数,应该没有把出生那一天算上吧

又重新看了一遍代码,之前理解错了,你是对的

为什么不用减一?总年数减2不就是去掉今年和出生年的年数吗?

如果这样来算中间的润年数,好像下标有点问题,应该是从 y[1] 到 y[27] 即:
for(int i=1;i<e_year-s_year;i++)
这里还要考虑出生年份和今年年份之差为1年或相等时的处理。

第77行
+365*(e_year-s_year-1)
还要考虑出生年份和今年年份相等且是润年时,上式应为 -366
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 06:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表