亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

計算日期時結果總是不準確。這是什么原因?

計算日期時結果總是不準確。這是什么原因?

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個贊

設置斷點調試一下吧,更清晰一點?,F在我手里沒電腦

查看完整回答
反對 回復 2016-09-07
?
慕名不來

TA貢獻10條經驗 獲得超7個贊

第85行: while?(365?>=?days?>?0) 這個條件表達式寫錯了,沒仔細看邏輯,你自己再檢查下吧。建議可以寫個借口函數,由天數推日期,由日期推天數。你這樣反著來好繞啊

查看完整回答
反對 回復 2016-09-08
  • 玄天
    玄天
    問題沒有想象中的那么復雜,我已經通過刪除冗余代碼解決了。謝謝你的回復!
  • 2 回答
  • 0 關注
  • 1304 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號