本文主要是介绍【日期问题】九度OJ 1070:今年的第几天,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、题目内容
题目描述:
输入年、月、日,计算该天是本年的第几天。
输入:
包括三个整数年(1<=Y<=3000)、月(1<=M<=12)、日(1<=D<=31)。
输出:
输入可能有多组测试数据,对于每一组测试数据,
输出一个整数,代表Input中的年、月、日对应本年的第几天。
样例输入:
1990 9 20
2000 5 1
样例输出:
263
122
二、代码及注释
#include<stdio.h>
#define ISYEAP(x) x%100!=0 && x%4==0 || x%400==0 ?1:0
using namespace std;
int dayofMonth[13][2]{0,0,31,31,28,29,31,31,30,30,31,31,30,30,31,31,31,31,30,30,31,31,30,30,31,31
};
struct Date{int Year;int Month;int Day;void nextDay(){Day++;if(Day>dayofMonth[Month][ISYEAP(Year)]){Day=1;Month++;if(Month>12){Month=1;Year++;}}}
};
int Abs(int x){return x<0?-x:x;
}
int buf[5001][13][32];
int main(){Date tmp;int cnt=0;//统计该日期到0000年1月1日的天数tmp.Year=0;tmp.Month=1;tmp.Day=1;while(tmp.Year!=5001){buf[tmp.Year][tmp.Month][tmp.Day]=cnt;tmp.nextDay();cnt++;}int y1,m1,d1;while(scanf("%4d%2d%2d",&y1,&m1,&d1)!=EOF){printf("%d\n",Abs(buf[y1][m1][d1]-buf[y1][1][1])+1);//减1月1日再+1就行}
}
这篇关于【日期问题】九度OJ 1070:今年的第几天的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!