题目描述已知 2007 年 10 月 10 日,请求出 n 天后是几月几号输入描述多组输入,每组输入为 1 行,为一个正整数 n( 1≤n≤2000)
输出描述对于每组输入,输出格式为 yyyy-mm-dd , 输出的值为 n 天后的日期
样例输入
2
样例输出
2007-10-11
2007-10-12
挺喜欢做这种有实际用处的题目的///作为一个小菜鸡 //这能做做应用题来安慰安慰自己)=哭哭
这个问题挺简单一般用switch
要分类讨论一下各种情况
先上代码kkkkk
#include<iostream>
using namespace std;
int main(){
int n;
while(cin>>n){
int year=2007;//先初始化2007-10-10
int month=10;
int day=10;
for(int i=1;i<=n;i++){
day=day+1;//从日开始一点儿一点儿往上加
switch(month){//先找出每个月有31天的月份方便后面对超出一个月最大天数而进行的月份进位
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if(day==32){
month=month+1;//超出最大天份月数加一
day=1;
}
if(month==13){//超出最大年份年份加一
year=year+1;
month=1;
}break;
case 2://闰年2月有29天 ,要分开讨论
if((year%4==0&&year%100!=0)||year%400==0){
if(day==30){
month=month+1;
day=1;
}
}
else{
if(day==29){
month=month+1;
day=1;
}
}break;
default:
if(day==31){
month=month+1;
day=1;
}
if(month==13){
year=year+1;
month=1;
}break;
}
}
if(month<10&&day<10){
cout<<year<<"-"<<0<<month<<"-"<<0<<day<<endl;
}
else if(month<10&&day>=10){
cout<<year<<"-"<<0<<month<<"-"<<day<<endl;
}
else if(month>=10&&day<10){
cout<<year<<"-"<<month<<"-"<<0<<day<<endl;
}
else{
cout<<year<<"-"<<month<<"-"<<day<<endl;
}
}
return 0;
}
自认为这个方法比较长 效率比较低,但我认为这个对于初次做这道题可以有一个系统的分析。效率更好的方法只需要在中间几步给出变更即可。
拜拜