第几天?
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 112890 Accepted Submission(s): 41051
Problem Description
给定一个日期,输出这个日期是该年的第几天。
Input
输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。
Output
对于每组输入数据,输出一行,表示该日期是该年的第几天。
Sample Input
1985/1/20 2006/3/12
Sample Output
20 71
这题说白了就是一道数学题,没什么好说的,水题一枚~很健康。唯一要求的就是判断闰年和非闰年。其实我写麻烦了,可以更好的简化代码。
以下是我的AC代码:
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
int a,b,c,num,sum;
while(scanf("%d/%d/%d",&a,&b,&c)==3)
{
num=0;sum=0;
if(a%4==0 && a%100!=0)num++;
if(a%400==0)num++;
if(a%3200==0 && a%172800==0)num++;
if(num!=0)
{
if(b>2 && b<=7)
{
sum=31+29+floor((b-2)/2+0.5)*31+int((b-2)/2)*30+c;
}
if(b<=2)
{
sum=(b-1)*31+c;
}
if(b>=8)
{
sum=213+floor((b-8)/2+0.5)*31+int((b-8)/2)*30+c;
}
cout<<sum<<endl;
}
else
{
if(b>2 && b<=7)
{
sum=31+28+floor((b-2)/2+0.5)*31+int((b-2)/2)*30+c;
}
if(b<=2)
{
sum=(b-1)*31+c;
}
if(b>=8)
{
sum=212+floor((b-8)/2+0.5)*31+int((b-8)/2)*30+c;
}
cout<<sum<<endl;
}
}
return 0;
}