为了账号安全,请及时绑定邮箱和手机立即绑定

为什么这样算多了一天?

#include <stdio.h>

int main() 

    /* 定义需要计算的日期 */

    int year = 2008;

    int month = 8;

    int day = 8;

    int sum;

    switch(month)

    {case 1:

    case 2:sum=sum+1;break;

    case 3:

    case 4:sum=sum+2;break;

    case 5:

    case 6:sum=sum+3;break;

    case 7:

    case 8:sum=sum+4;break;

    case 9:sum=sum+5; break;

    case 10:

case 11:sum=sum+6;break;

    case 12: break;

   

}

  if(year%400==0)

    sum=sum+1;

    else

    sum=sum+30*(month-1)+day-2;

     printf("%d",sum);

    return 0;

}


正在回答

3 回答

完全不知道楼主想要求的是什么,不过看到400感觉是在求闰年,如果是这样的话,那你的程序不完整啊,如果不是的话,当我什么都没说。

0 回复 有任何疑惑可以回复我~
#1

胡歌一号迷弟 提问者

之前程序有点点问题,看到你的评论后我进行了更改,更改过程中发现我犯了一个常识性错误,已经进行了更改,由于程序超出了回复的字数的限制,所以我就用正确程序回复了我自己,你可以往下翻看一下,我备注了,方便你理解我的思路。谢谢。
2016-11-09 回复 有任何疑惑可以回复我~

楼主看样子是你的switch语句出了问题

改成这样试试,正确与否我不是很确定

switch(month)

{

    case 1:break;

    case 2:

    case 3:sum=sum+1;break;

    case 4:

    case 5:sum=sum+2;break;

    case 6:

    case 7:sum=sum+3;break;

    case 8:sum=sum+4;break;

    case 9:

    case 10:sum=sum+5; break;

    case 11:

    case 12:sum=sum+6;break;

}


0 回复 有任何疑惑可以回复我~
#1

胡歌一号迷弟 提问者

你这样写是错的,我改后的那个程序是对的
2016-11-20 回复 有任何疑惑可以回复我~

#include <stdio.h>

int main() 

{   int year = 2008;

    int month = 8;

    int day = 8;

    int sum;

sum=30*(month-1)+day;//我把每个月都当30天来求,

    switch(month)    //先求当前这个月之前多了几天

    {case 1:   //(因为有的月31天,二月除外)

    case 2:sum=sum+1;break;

    case 3:

    case 4:sum=sum+2;break;

    case 5:

    case 6:sum=sum+3;break;

    case 7:

    case 8:sum=sum+4;break;

    case 9:sum=sum+5; break;

    case 10:

case 11:sum=sum+6;break;

    case 12: break;

   

}

  if(year%400==0||(year%4==0&&year%100!=0))//判断是否是闰年

sum=sum-1;// 若是那么二月比之前假设的30天少一天  

    else

   sum=sum-2;//若不是则少两天 

     printf("%d",sum);

    return 0;

}//之前以为闰年是只能被400整除的。应该是: 

//①普通年能被4整除且不能被100整除的为闰年。

//②世纪年能被400整除的是闰年


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么这样算多了一天?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信