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 关注
- 1248 浏览
添加回答
举报
0/150
提交
取消