今天是HRBUST2019级新生赛正赛,小赵和小陈兴高采烈的来到了比赛场上。
这时,小陈突然想到了前天老师说10天后要检查的大作业,便问小周:“10天后的安卓作业准备的怎么样了?”。
这时小周问道:“10天?今天是2019年11月16号,上次说的10天到今天算就只有8天了,哪来的10天!想些啥呢你!”。
小陈:“是是是,你厉害,你算的准,只有8天了,那我问你,50天后是几号?”。
小周自信的回答道:“今天是16号,加上50就是66,减去这个月的30天就还剩36天,再减去下个月的31天就还剩5天,所以答案是明年的1月5号,怎么样?没算错吧!”
“再来”,小陈继续问道“100天后呢?200天后呢?”
这时小周被一连串的问题给问烦了,说道:“你等着,等我写个程序,随便你问”。
这时小周来找你,请你帮他写出这个程序。
输入
题目有多组测试数据,处理到文件结束。
下面每组测试数据一行一个整数n,请计算出n天后是几号。(-10000<=n<=10000)。
输出
每组测试数据输出”YYYY MM DD”代表YYYY年MM月DD日。
样例输入 Copy
0 1 -1
样例输出 Copy
2019 11 16 2019 11 17 2019 11 15
提示
注意年份用前导0补齐四位,月份和日用前导零补齐两位。
题目大意:就是说给你今天的日期(如:2019年11月26日)问你向前或者向后n(-10000<=n<=10000)天是那一年那一月那一日
AC代码:(可能有带你啰嗦,大神勿喷)
#include <iostream> using namespace std; int main(){ int y,m,d,dmax; int d1; y=2019,m=11,d=16; while(~scanf("%d",&d1)){ if(d1>0){ for(int i=1;i<=d1;i++){ switch(m){ case 1: case 3: case 5: case 7: case 8: case 10: case 12: dmax=31; break; case 4: case 6: case 9: case 11: dmax=30; break; } if(m==2){ if(y%400==0||y%100!=0&&y%4==0){ dmax=29; }else{ dmax=28; } } if(d<dmax){ d++; }else if(d==dmax&&m<12){ m=m+1; d=1; }else if(m==12&&d==31){ y=y+1; m=1; d=1; } } } else if(d1<0){ d1=-d1; for(int i=d1;i>=1;i--){ switch(m){ case 1: case 2: case 4: case 6: case 8: case 9: case 11: dmax=31; break; case 5: case 7: case 10: case 12: dmax=30; break; } if(m==3){ if(y%400==0||y%100!=0&&y%4==0){ dmax=29; }else{ dmax=28; } } if(d>1){ d--; }else if(d==1&&m>1){ m=m-1; d=dmax; }else if(m==1&&d==1){ y=y-1; m=12; d=dmax; } } } printf("%04d %02d %02d ",y,m,d); y=2019,m=11,d=16; } return 0; }
实例二:
ZCQ老师的生日是Y年M月D日,他想知道自己出生后第一万天纪念日的日期(出生日算第0天)。
输入
只有一行,分别读入Y,M,D(分别代表年、月、日),日期绝对合法。
(1900<=Y<=2008,1<=M<=12,1<=D<=31)
输入
只有一行,分别读入Y,M,D(分别代表年、月、日),日期绝对合法。
(1900<=Y<=2008,1<=M<=12,1<=D<=31)
输出
只有一行,即ZCQ老师生日第一万天以后的日期,格式为“Y-M-D”。
(注意年月日之间用横线连接)
只有一行,即ZCQ老师生日第一万天以后的日期,格式为“Y-M-D”。
(注意年月日之间用横线连接)
样例输入 Copy
1979 4 16
样例输出 Copy
2006-9-1
1979 4 16
样例输出 Copy
2006-9-1
#include <iostream> using namespace std; int main() { int y,m,d,dmax; cin>>y>>m>>d; for(int i=1;i<=10000;i++){//把10000改为任意数就变成任意天后的日期 switch(m){ case 1: case 3: case 5: case 7: case 8: case 10: case 12: dmax=31; break; case 4: case 6: case 9: case 11: dmax=30; break; } if(m==2){ if(y%400==0||y%100!=0&&y%4==0){ dmax=29; }else{ dmax=28; } } if(d<dmax){ d++; }else if(d==dmax&&m<12){ m=m+1; d=1; }else if(m==12&&d==31){ y=y+1; m=1; d=1; } } cout<<y<<"-"<<m<<"-"<<d; return 0; }