第几天?
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 94388 Accepted Submission(s): 35517
Problem Description
给定一个日期,输出这个日期是该年的第几天。
Input
输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。
Output
对于每组输入数据,输出一行,表示该日期是该年的第几天。
Sample Input
1985/1/20
2006/3/12
Sample Output
20
71
幸幸苦苦写好了
#include<string.h>
#include<stdio.h>
#include<math.h>
#include<algorithm>
#define N 130
int dayOfMonth[2][13] = {//一开始的时候[],什么的都用上了,哈哈
{ //基础不牢地动山摇
0,31,28 ,31,30 ,31,30 ,31,31,30 ,31,30 ,31//平年
},{
0,31,29 ,31,30 ,31,30 ,31,31,30 ,31,30 ,31//润年
}
};
int isPing(int year){//判断平年还是闰年
if((year%4 == 0 && year%100 != 0) || year % 400 == 0)
return 1;
return 0;
}
int main()
{
int i,n,k,j,year,month,day,ping;
int date[3],start[3];
char temp[10];
char str[30];
char * token = NULL;
gets(str);
token = strtok(str,"/");
i=0;
memset(date,0,sizeof(date));//date保存年、月、日
while(token != NULL){
for(j=0; *(token+j) != '\0'; j++){}//记录字符串的长度
for(j--,k=0;j>=0;j--,k++){//倒序输出,便于计算数值
date[i] += (*(token+j) - '0')*pow(10,k);
}
i++;
token = strtok(NULL, "/");//一直不理解为什么传的参数是NULL,干就对了
}
start[1] = 1;//从当年一月一号开始计数
start[2] = 1;
day=0;
ping = isPing(date[0]);//不更新年,所以放在外面执行一次就好
while((start[1] < date[1]) || (start[2] <= date[2])){
day++;
start[2]++;
if(dayOfMonth[ping][start[1]] < start[2]){
start[1]++;
start[2]=1;//第一次写好的时候忘记重置日的值了
}
}
printf("%d\n",day);
return 0;
}
为了找存在感就看了看其他人的代码,欲哭无泪啊,没有对比就没有伤害
#include<stdio.h>
int main()
{
int y,m,d,day;
while(scanf("%d/%d/%d",&y,&m,&d)!=EOF)
{
day=0;
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//每次闰年会让二月份的值变化
if((y%4==0&&y%100!=0)||y%400==0)//判断闰年
a[2]++;
for(y=1;y<m;y++)
day=day+a[y];
day=day+d;
printf("%d\n",day);
}
return 0;
}