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 回答

慕名不來
TA貢獻10條經驗 獲得超7個贊
第85行: while?(365?>=?days?>?0) 這個條件表達式寫錯了,沒仔細看邏輯,你自己再檢查下吧。建議可以寫個借口函數,由天數推日期,由日期推天數。你這樣反著來好繞啊
- 2 回答
- 0 關注
- 1304 瀏覽
添加回答
舉報
0/150
提交
取消