/*
计算过了D天后的日期
之前D天的日期
*/
#include<stdio.h>
int judge_year( int year ){
if( (year%4==0&&year%100!=0)||(year%400==0) )
return true;
else
return false;
}
int judge_month( int mon ){
if( mon==1||mon==3||mon==5||mon==7||mon==8||mon==10||mon==12 )
return true;
else
return false;
}
int main(){
int ca;
//freopen("cmp.txt","w",stdout);
scanf("%d",&ca);
while( ca-- ){
int n;
scanf("%d",&n);
int year,mon,day;
year = 2013;
mon = 3;
day = 24;
int sum = n;
while( sum>0 ){
if( judge_year(year)==true ){
//printf("sum=%d,,year = %d,mon=%d,day=%d\n",sum,year,mon,day);
if( mon==2 ){
int left = 29-day;
if( sum>left ){
sum = sum-(left+1);
mon++;
day = 1;
}
else if( sum==left ){
sum = 0;
day = 29;
}
else {
day += sum;
sum = 0;
}
}
else if( judge_month( mon )==true ){
int left = 31-day;
if( sum>left ){
sum = sum-left-1;
mon++;
if( mon>12 ) {
year++;
mon = 1;
}
day = 1;
}
else if( sum==left ){
sum = 0;
day = 31;
}
else{
day += sum;
sum = 0;
}
}
else {
int left = 30-day;
if( sum>left ){
sum = sum-left-1;
mon++;
if( mon>12 ) {
year++;
mon = 1;
}
day = 1;
}
else if( sum==left ){
sum = 0;
day = 30;
}
else{
day += sum;
sum = 0;
}
}
}//闰年
else{
if( mon==2 ){
int left = 28-day;
if( sum>left ){
sum = sum-left-1;
mon++;
day = 1;
}
else if( sum==left ){
sum = 0;
day = 28;
}
else {
day += sum;
sum = 0;
}
}
else if( judge_month( mon )==true ){
int left = 31-day;
if( sum>left ){
sum = sum-left-1;
mon++;
if( mon>12 ) {
year++;
mon = 1;
}
day = 1;
}
else if( sum==left ){
sum = 0;
day = 31;
}
else{
day += sum;
sum = 0;
}
}
else {
int left = 30-day;
if( sum>left ){
sum = sum-left-1;
mon++;
if( mon>12 ) {
mon = 1;
year++;
}
day = 1;
}
else if( sum==left ){
sum = 0;
day = 30;
}
else{
day += sum;
sum = 0;
}
}
}//不是闰年
if( sum<=0 )
break;
}//向后D天的日期
printf("%04d/%02d/%02d ",year,mon,day);
year = 2013;
mon = 3;
day = 24;
sum = n;
while( sum>0 ){
if( judge_year( year )==true ){
if( sum>=366 ){
sum-=366;
year--;
}
else{
if( mon==3 ){
int left = day;
if( sum>=29 ){
sum-=29;
mon--;
}
else {
if( sum==left-1 ){
sum = 0;
day = 1;
}
else if( sum<left-1 ){
day -= sum;
sum = 0;
}
else {
sum -= left;
day = 29;
mon--;
}
}
}
else if( mon==5||mon==7||mon==10||mon==12 ){
int left = day;
if( sum>=30 ){
sum-=30;
mon--;
}
else {
if( sum==left-1 ){
sum = 0;
day = 1;
}
else if( sum<left-1 ){
day -= sum;
sum = 0;
}
else {
sum -= left;
day = 30;
mon--;
}
}
}
else {
int left = day;
if( sum>=31 ){
sum-=31;
mon--;
if( mon<=0 ){
year--;
mon=12;
}
}
else {
if( sum==left-1 ){
sum = 0;
day = 1;
}
else if( sum<left-1 ){
day -= sum;
sum = 0;
}
else {
sum -= left;
day = 31;
mon--;
if( mon==0 ){
mon = 12;
year--;
}
}
}
}
}
}//闰年
else {
if( sum>=365 ){
sum-=365;
year--;
}
else{
if( mon==3 ){
int left = day;
if( sum>=28 ){
sum-=28;
mon--;
}
else {
if( sum==left-1 ){
sum = 0;
day = 1;
}
else if( sum<left-1 ){
day -= sum;
sum = 0;
}
else {
sum -= left;
day = 28;
mon--;
}
}
}
else if( mon==5||mon==7||mon==10||mon==12 ){
int left = day;
if( sum>=30 ){
sum-=30;
mon--;
}
else {
if( sum==left-1 ){
sum = 0;
day = 1;
}
else if( sum<left-1 ){
day -= sum;
sum = 0;
}
else {
sum -= left;
day = 30;
mon--;
}
}
}
else {
int left = day;
if( sum>=31 ){
sum-=31;
mon--;
if( mon==0 ){
year--;
mon=12;
}
}
else {
if( sum==left-1 ){
sum = 0;
day = 1;
}
else if( sum<left-1 ){
day -= sum;
sum = 0;
}
else {
sum -= left;
day = 31;
mon--;
if( mon==0 ){
mon = 12;
year--;
}
}
}
}
}
}//不是闰年
if( sum<=0 ) break;
}
printf("%04d/%02d/%02d\n",year,mon,day);
}
return 0;
}
分享到:
相关推荐
这些题目来自于杭州电子科技大学的在线评测系统HDU的题集,涵盖了从2000到2009的编号。这些题目旨在测试编程者的基本算法理解、数学计算能力以及问题解决技巧。以下是对这些题目中涉及知识点的详细解释: 1. **2000...
根据给定文件的信息,我们可以分析出这是一道与计算日期相关的算法题目,主要涉及的是如何确定一年中的第几天。下面将详细解释此题目的背景、算法思路以及代码实现。 ### 背景介绍 该题目来自HDU ACM(浙江工业...
2009年10月19日的日期可能是指该课件的制作或授课日期。 动态规划的主要知识点包括但不限于以下几点: 1. **基本概念**:动态规划是一种通过将大问题分解成子问题来求解的方法,关键在于找到最优子结构和重叠子...
- **日期计算**:程序的主要功能是计算输入日期距离当年第一天的天数,即通过累加前几个月的天数及当月的天数得到总天数。 ### 5. 代码优化建议 - **可读性**:适当增加代码注释,提高代码的可读性。 - **变量命名...
标题中的“HDOJ4515[源代码+数据].DateCalculator”表明这是一个与在线编程挑战平台HDOJ(HDU Online Judge)上的第4515题相关的项目,题目名为“DateCalculator”。该题可能涉及计算或比较日期的问题。源代码文件...
例如,在"Calendar Game"中,通过观察日期和月份之和的奇偶性变化,可以确定先手或后手的获胜条件。 接下来,文章介绍了几种经典的博弈模型。巴什博奕(Bash Game)是一个简单的物品分割游戏,威佐夫博弈(Wythoff'...
例如,`fits.open()`可以打开一个FITS文件,返回一个可以迭代的HDU(Header Data Unit)列表,每个HDU代表文件的一个数据块;`fits.writeto()`则可以将数据写入新的或已存在的FITS文件。 2. **FITS头信息处理**:...
Header部分是ASCII文本,存储关于数据的信息,如观测日期、仪器设置等。Data部分可以是图像数据,也可以是表格或其他形式的数据。 **Python中的FITS处理** 在Python中,我们可以使用Astropy库来读取、写入和操作...