杭电acm2005的问题,求第几天
解决时间 2021-02-28 19:06
- 提问者网友:刺鸟
- 2021-02-28 09:56
Problem Description
给定一个日期,输出这个日期是该年的第几天。
Input
输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。
Output
对于每组输入数据,输出一行,表示该日期是该年的第几天。
Sample Input
1985/1/20
2006/3/12
Sample Output
20
71
--------------------------------------------
我的程序,答案都对,但一直是wrong answer
#include
using namespace std;
int main(void)
{
int days[12] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int y, m, d;
while (scanf_s("%d/%d/%d", &y, &m, &d) != EOF)
{
if (y % 4 != 0 || (y % 100 == 0 && y % 400 != 0))
{
days[1] = 28;
}
int day=0;
if (m == 1)
{
for (int i = 1; i < m; i++)
day += days[i];
}
else
{
for (int i = 0; i < m-1; i++)
day += days[i];
}
day += d;
cout << day << endl;
}
return 0;
}
求帮助问题出在哪了
最佳答案
- 五星知识达人网友:神也偏爱
- 2021-02-28 10:27
if (m == 1)
{
for (int i = 1; i < m; i++)
day += days[i];
}
这种东西没意义。。。。根据都进不了循环
scanf_s 这个函数改成scanf
scanf_s这是vs的,其他编译器可能认不了
平年的判断有问题
if (y % 4 != 0 || (y % 100 == 0 && y % 400 != 0))
{
判断闰年是
if(( y %4 == 0 && y % 100 != 0)| | ( y % 400 == 0 ))
这个取反,不等于上面的逻辑表达式。
写成
if(!(( y %4 == 0 && y % 100 != 0)| | ( y % 400 == 0 )))
取平年2100来说,你判断是是29天。
全部回答
修改后的ac代码:
#include
main()
{
int y,m,d,i;
while(scanf("%4d/%2d/%2d",&y,&m,&d)==3)
{
i=0;
switch(m)
{ // 使用{}来标识switch的范围
case 12:i+=30;
case 11:i+=31;
case 10:i+=30;
case 9:i+=31; // 不要09,直接9就可以了。09不是合法常量
case 8:i+=31; // 同上
case 7:i+=30; //
case 6:i+=31; //
case 5:i+=30; //
case 4:i+=31; //
case 3:{
if(y%400==0 || (y%100!=0 && y%4==0) ) // 这里少个)
i+=29;
else
i+=28;
};
case 2:i+=31;
case 1:i+=d;
}
printf("%d\n",i);
}
}
我要举报
大家都在看
推荐资讯