题目链接:http://codeup.cn/problem.php?cid=100000578&pid=4
题目描述
设计一个程序能计算一个日期加上若干天后是什么日期。
输入
输入第一行表示样例个数m,接下来m行每行四个整数分别表示年月日和累加的天数。
输出
输出m行,每行按yyyy-mm-dd的个数输出。
样例输入
1 2008 2 3 100
样例输出
2008-05-13
#include<iostream>
using namespace std;
int day_month[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}};
bool is_leap(int y){
if((y%4==0&&y%100!=0)||(y%400==0)){
return 1;
}
return 0;
}
int main(){
int y,m,d,x;
int T;
cin>>T;
while(T--){
cin>>y>>m>>d>>x;
int t=d+x;
while(t>day_month[m][is_leap(y)]){
t-=day_month[m][is_leap(y)];
m++;
if(m>=13){
y++;
m=1;
}
}
printf("%04d-%02d-%02d\n",y,m,t);
}
return 0;
}
将天数不断+1,如果到达当前所在月份的月底,月份+1即到达下一个月,天数更新为第一天,如果月份大于12月,将年份+1,月份更新为第一个月。
#include<iostream>
using namespace std;
int day_month[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}};
bool is_leap(int y){
if((y%4==0&&y%100!=0)||(y%400==0)){
return 1;
}
return 0;
}
int main(){
int y,m,d,x;
int T;
cin>>T;
while(T--){
cin>>y>>m>>d>>x;
for(int i=1;i<=x;i++){
d++;
if(d>day_month[m][is_leap(y)]){
m++;
d=1;
}
if(m>=13){
y++;
m=1;
}
}
printf("%04d-%02d-%02d\n",y,m,d);
}
return 0;
}