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天之前的日期。
具体过程,请参考注释。
但是在测试过程中,总是出现年为负数,月和日也不正确的结果。这是什么原因?
JustWannaHugU
慕名不来
相关分类