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

计算日期时结果总是不准确。这是什么原因?

计算日期时结果总是不准确。这是什么原因?

C++
玄天 2016-09-07 20:48:27
include "iostream" using namespace std; int main() {     int year, month, day;     int days;     int sum;     cout << "请输入年:";     cin >> year;     cout << "请输入月:";     cin >> month;     cout << "请输入日:";     cin >> day;     cout << "请输入日期";     cin >> days;     switch(month)     {          case 1:         sum = 0;         break;         case 2:         sum = 31;         break;         case 3:         sum = 59;         break;         case 4:         sum = 90;         break;         case 5:         sum = 120;         break;         case 6:         sum = 151;         break;         case 7:         sum = 181;         break;         case 8:         sum = 212;         break;         case 9:         sum = 243;         break;         case 10:         sum = 273;         break;         case 11:         sum = 304;         break;         case 12:         sum = 334;         break;         default:         cout << "你输入的月份有误。";         break;     }     sum += day - 1;     //减1的目的是为了保证当sum值为0时,year仍为当年     if (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0))         {             if (month > 2)             sum++;             //如果该年为闰年,且月份大于2月,那么sum值加1         }     days -= sum;     //将天数减去sum的值     while (days > 365)     //如果天数大于365     {         if ((year - 1) % 400 == 0 || (year - 1) % 100 != 0 && (yea r- 1) % 4 == 0)         //如果该年减1后的年为闰年         {             days -= 366;             //天数减366         }         else         {             days -= 365;             //否则天数减365         }         year -= 1;         //年份随之减1     }     while (365 >= days > 0)     //当天数不大于365且大于0时     {         days -= 1;         day -= 1;         //天数减1,日随之减1         if (day == 0)         //如果日为0         {             if (month == 1)             //如果月为1             {                 month = 12;                 day = 31;                 year -= 1;                 //月份更改为12,日更改为31,年减1             }             else if (month == 5 || month == 7 || month == 10 || month == 12)             //如果月为5,7,10,12             {                 day = 30;                 month -= 1;                 //天数更改为30,月减1             }             else if ( month == 2 || month == 4 || month == 6 || month == 8 || month == 9 || month == 11)             //如果月为2,4,6,8,9,11             {                 day = 31;                 month -= 1;                 //天数更改为31,月减1             }             else if (month == 3)             //如果月为3             {                 if (year % 400 == 0 || year % 100 != 0 && year % 4 == 0)                 //如果当年为闰年                 {                     day = 29;                     month -= 1;                     //天数更改为29,月减1                 }                 else                 {                     day = 28;                     month -= 1;                     //否则天数更改为28,月减1                 }             }             else             //如果月不是以上的值                 cout << "此月份不存在。";         }     }     cout << "计算得到的日期是" << year << "年" << month << "月" << day << "日";     return 0; }这段代码的目的大致如下:输入年、月、日后,输入一个天数(大于0),计算该日期指定天数之前的日期。例如:依次输入2032、9、25、1836,计算2032年9月25日的1836天之前的日期。具体过程,请参考注释。但是在测试过程中,总是出现年为负数,月和日也不正确的结果。这是什么原因?
查看完整描述

2 回答

已采纳
?
JustWannaHugU

TA贡献452条经验 获得超796个赞

设置断点调试一下吧,更清晰一点。现在我手里没电脑

查看完整回答
反对 回复 2016-09-07
?
慕名不来

TA贡献10条经验 获得超7个赞

第85行: while (365 >= days > 0) 这个条件表达式写错了,没仔细看逻辑,你自己再检查下吧。建议可以写个借口函数,由天数推日期,由日期推天数。你这样反着来好绕啊

查看完整回答
反对 回复 2016-09-08
  • 玄天
    玄天
    问题没有想象中的那么复杂,我已经通过删除冗余代码解决了。谢谢你的回复!
  • 2 回答
  • 0 关注
  • 1248 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信