n是输入的这一年中的第n天,sum是整月的天数顺次连续相加之和。
假设输入的年份为2000年(闰年):
n=3时,
i=0,sum=0;
i=1,sum=0+31=31;n<=sum,说明第n天未超过第一个整月
3<=31说明第3天还超过1月的最后一天,即第n天是1月份的某一天;
n=31时,
i=0,sum=0;
i=1,sum=0+31=31;n<=sum,说明第n天未超过第一个整月
31=31说明第31天是1月的最后一天;
n=40时,
i=0,sum=0;
i=1,sum=0+31=31;n>sum,说明第n天超过第1个整月;
i=2,sum=0+31+29=60;n<=sum,说明第n天未超过第二个整月;
40<=60说明第40天还超过2月的最后一天,即第n天是2月份的某一天;
#include <stdio.h>
#include<string.h>
int main() {
int year=0,day=0,month=0,sum=0,n=0;
int mon[13]={0};
mon[1]=31;mon[3]=31;mon[4]=30;mon[5]=31;mon[6]=30;
mon[7]=31;mon[8]=31;mon[9]=30;mon[10]=31;mon[11]=30;mon[12]=31;
while(scanf("%d %d",&year,&n) != EOF){
if((year%4 == 0 && year%100 !=0) || (year % 400 ==0)){
mon[2]=29;
}
else{
mon[2]=28;
}
for(int i=0;i<=12;i++){
sum=sum+mon[i];
if(sum>=n){
day=n-sum+mon[i];
printf("%d-%02d-%02d\n",year,i,day);
break;
}
}
sum=0;
}
return 0;
}