问题描述
给定一个年份y和一个整数d,问这一年的第d天是几月几日?
注意闰年的2月有29天,且满足下面条件之一的是闰年:
1) 年份是4的整数倍,而且不是100的整数倍;
2) 年份是400的整数倍
输入说明
输入包含两个整数y和d,y表示年份,年份在1900到2018之间(包含1900和2018)。 d表示这一年的第几天,d在1至365之间。
输出说明
在一行输出两个整数,分别表示答案的月份和日期。
输入样例
2015 80输出样例
3 21
#include <stdio.h>//日期计算 给定一个年份y和一个整数d,问这一年的第d天是几月几日?
//最初想设置一个标志记录是否是闰年,还定义了month和day用于最后的输出,
// 但发现重复太多,有点麻烦且长度长,还是以最直接的方式实现
int main() {int y,d;scanf("%d %d",&y,&d);
// int flag=0;if(y%4==0 && y%100 != 0 || y%400 == 0){//闰年if(d <= 31){printf("%d %d\n",1,d);} else if(d <= 60){//建议直接算出来数字,直观且易懂printf("%d %d\n",2,d-31);} else if(d <= 91){printf("%d %d\n",3,d-60);} else if(d <= 121){printf("%d %d\n",4,d-91);} else if(d <= 152){printf("%d %d\n",5,d-121);} else if(d <= 182){printf("%d %d\n",6,d-152);} else if(d <= 213){printf("%d %d\n",7,d-182);} else if(d <= 244){printf("%d %d\n",8,d-213);} else if(d <= 274){printf("%d %d\n",9,d-244);} else if(d <= 305){printf("%d %d\n",10,d-274);} else if(d <= 335){printf("%d %d\n",11,d-305);} else if(d <= 366){printf("%d %d\n",12,d-335);}} else{if(d <= 31){printf("%d %d\n",1,d);} else if(d <= 59){printf("%d %d\n",2,d-31);} else if(d <= 90){printf("%d %d\n",3,d-59);} else if(d <= 120){printf("%d %d\n",4,d-90);} else if(d <= 151){printf("%d %d\n",5,d-120);} else if(d <= 181){printf("%d %d\n",6,d-151);} else if(d <= 212){printf("%d %d\n",7,d-181);} else if(d <= 243){printf("%d %d\n",8,d-212);} else if(d <= 273){printf("%d %d\n",9,d-243);} else if(d <= 304){printf("%d %d\n",10,d-273);} else if(d <= 334){printf("%d %d\n",11,d-304);} else if(d <= 365){printf("%d %d\n",12,d-334);}}return 0;
}