错在哪了啊
输入年月日,判断这一天是今年的第几天?#include<bits/stdc++.h>
using namespace std;
int main()
{
int year,mon,day,days=0,i;
scanf("%4d%2d%2d",&year,&mon,&day);
if(mon<1||mon>12)
{cout<<"-1"<<endl;return 0;}
if(day>31) {cout<<"-1"<<endl;return 0;}
int a={31,29,31,30,31,30,31,31,30,31,30,31};
int b={31,28,31,30,31,30,31,31,30,31,30,31};
if(year%400==0||(year%4==0&&year%100!=0))
{
if(mon==2&&day>29) {cout<<"-1"<<endl;return 0;}
else switch(mon)
{
case 1:
case 3:
case 5:
case 7:
case 9:if(day==31){cout<<"-1"<<endl;return 0;}
}
days=day;
for(i=1;i<mon;i++)
{
days+=a;
}
}
if(year%400!=0||(year%4!=0&&year%100==0))
{
if(mon==2&&day>28) {cout<<"-1"<<endl;return 0;}
else switch(mon)
{
case 1:
case 3:
case 5:
case 7:
case 9:if(day==31){cout<<"-1"<<endl;return 0;}
}
days=day;
for(i=1;i<mon;i++)
{
days+=a;
}
}
cout<<days;
return 0;
} 错误的地方在于条件判断语句 `if(mon12)`,这是一个错误的条件表达式。
可以修改代码如下:
#include <iostream>
using namespace std;
int main() {
int year, mon, day, days = 0;
cin >> year >> mon >> day;
int month_days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
// 判断是否为闰年,闰年2月有29天
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
month_days = 29;
}
// 累加前面几个月的天数
for (int i = 0; i < mon - 1; i++) {
days += month_days;
}
// 加上当前月的天数
days += day;
cout << "这一天是今年的第" << days << "天" << endl;
return 0;
}
这段代码首先根据输入的年份 `year` 判断是否为闰年,如果是闰年则将二月的天数设为29天。然后使用循环累加前面几个月的天数,最后加上当前月的天数,得到结果输出。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。 在非闰年的情况下,你在计算累计天数时错误地使用了闰年的月份天数数组a,应当使用非闰年的月份天数数组b。以下是修正后的代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int year,mon,day,days=0,i;
scanf("%4d%2d%2d",&year,&mon,&day);
if(mon<1||mon>12)
{cout<<"-1"<<endl;return 0;}
if(day>31) {cout<<"-1"<<endl;return 0;}
int a={31,29,31,30,31,30,31,31,30,31,30,31};
int b={31,28,31,30,31,30,31,31,30,31,30,31};
if(year%400==0||(year%4==0&&year%100!=0))
{
if(mon==2&&day>29) {cout<<"-1"<<endl;return 0;}
else switch(mon)
{
case 1:
case 3:
case 5:
case 7:
case 8: // 此处应为8
case 10:// 此处应为10
case 12: if(day>31){cout<<"-1"<<endl;return 0;} break; //应增加返回操作
}
days=day;
for(i=1;i<mon;i++)
{
days+=a;
}
}
if(year%400!=0||(year%4!=0&&year%100==0))
{
if(mon==2&&day>28) {cout<<"-1"<<endl;return 0;}
else switch(mon)
{
case 1:
case 3:
case 5:
case 7:
case 8: // 此处应为8
case 10:// 此处应为10
case 12: if(day>31){cout<<"-1"<<endl;return 0;} break; //应增加返回操作
}
days=day;
for(i=1;i<mon;i++)
{
days+=b; // 此处应为b
}
}
cout<<days;
return 0;
}
这段代码修复了你的问题,现在正确地在给定日期是非闰年时使用了正确的月份天数数组,并且在日期超出月份天数限制时也可以正确返回错误信息。
有用请设置最佳答案{:10_254:}
页:
[1]