问题 A: 光棍节的大穿越
时间限制: 1 Sec 内存限制: 128 MB
提交: 67 解决: 5
[提交][状态][讨论版] [Edit] [TestData]
题目描述
“祝天下有情人都是失散多年的亲兄妹。”
“今年双十一呀,拆散一对是一对。”
为了让单身狗们有一个不被情侣秀的光棍节,“ACM配基穿(chai)越(san)集团”举行了情侣大穿越活动,在光棍节当天,只要是情侣,只要报名了“情侣大穿越”,可以选择“向前穿越”D天。
为了拆散情侣,男生的向前穿越是穿越到未来,女生的向前穿越是穿越到古代,这样,单身狗们就可以开心了。
已知现在的日期(2015/11/11)和穿越的天数D,聪明的棍儿,你能算出一对情侣男生和女生分别到达的年份和月份吗?
输入
输入首先包含一个整数N,表示有N组测试用例;
接下来N行是N组数据,每一行包含一个整数D***(abs(D)<=10,0000)*,D表示向前穿越的天数。
输出
请计算并输出男友和女友分别到达的日期,日期格式为YYYY/MM/DD,两个日期中间用一个空格隔开,每组数据占一行,具体输出格式请参见样例。
样例输入
1
2
样例输出
2015/11/13 2015/11/09
这一题主要是数据范围,时间是可以有负数的。
原题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=4515
#include<stdio.h>
#include<string.h>
int md[13] = {
0,31,28,31,30,31,30,31,31,30,31,30,31};
int isLoopYear(int y){
if((y%4==0&&y%100!=0)||(y%400)==0) return 1;
else return 0;
}
void getADay(int y, int m, int d,int days){
//向后推
int i;
for(i = 1;i <= days;i++){
//按照天算比较灵活
if(isLoopYear(y))
md[2] = 29;
else
md[2] = 28;
d++;
if(d > md[m]){
d = 1;
m++;
if(m > 12){
m=1;
y++;
}
}
}
//printf("%d\t%04d/%02d/%02d ",days,y,m,d);
printf(