|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
输入年月日,判断这一天是今年的第几天?#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[12]={31,29,31,30,31,30,31,31,30,31,30,31};
int b[12]={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[i-1];
}
}
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[i-1];
}
}
cout<<days;
return 0;
}
在非闰年的情况下,你在计算累计天数时错误地使用了闰年的月份天数数组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[12]={31,29,31,30,31,30,31,31,30,31,30,31};
int b[12]={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[i-1];
}
}
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[i-1]; // 此处应为b
}
}
cout<<days;
return 0;
}
这段代码修复了你的问题,现在正确地在给定日期是非闰年时使用了正确的月份天数数组,并且在日期超出月份天数限制时也可以正确返回错误信息。
有用请设置最佳答案
|
|