[ACM]某一天的n天后是几年几月几日
Description
小Q,2012年9月10日步入大学。刚刚步入大学的小Q,依旧怀念着以前的生活,所以他每天都会计算现在离刚刚开学过
去了多少天。可是某一天,突发奇想,想问你,给你n天,让你计算2012年9月10日后的n天是几年几月几日,比如
n=10,则
日期是2012年9月20日。这里你要注意可能会出现闰年的情况
Input
第一行一个整数T,表示有T组数据。
每组数据输入一个n(n<=10000)
Output
每行输出,n天后的几年几月几日,年月日用/分开,细节看样例输出
Sample Input
3 1 10 20
Sample Output
2012/9/11 2012/9/20 2012/9/30
解题思路:
刚看到这题感觉完了,肯定做不出来,因为感觉很复杂。不过后来理清思路,把所有情况都考虑到,还是做出来了,心理状态很重要啊。天数一天天的加,月末月份加一,日数为1,年末年份加1,月份为1,考虑不同月份的天数,考虑是否为闰年。
代码:
#include <iostream> using namespace std; int main() { int T; int i; cin>>T; for(i=1;i<=T;i++) { int year,month,day; year=2012; month=9; day=10;//初始化 int days; cin>>days; int j; for(j=1;j<=days;j++) { day=day+1;//天数一天天的加 if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) { if(day==32) { month=month+1; day=1; } if(month==13) { year=year+1;//进位 month=1;//月初 } } if(month==2)//特殊的月份 { if(((year%4==0&&year%100!=0)||year%400==0))//判断是否为闰年 { if(day==30) { day=1; month=month+1; } } else { if(day==29) { day=1; month=month+1; } } } if(month==4||month==6||month==9||month==11) { if(day==31) { month=month+1; day=1; } if(month==13) { year=year+1; month=1; } } } cout<<year<<"/"<<month<<"/"<<day<<endl; } return 0; }
运行截图: