这题有一个前人总结的终极优化版本。
思想其实也很简单。学起来也很快。优化了如果变成下一年的情况和闰年判断
#include <stdio.h>
#include <stdbool.h>
int main( ) {
int A[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31} ;
int year , days ;
while( scanf("%d %d",&year,&days) != EOF ) {
int t = 1 ;
int mouth = 1 ;
bool judge = year % 400 == 0 || year % 100 != 0 && year % 4 == 0 ;
if(judge){
A[2] = 29 ;
}else{
A[2] = 28 ;
}
while( t != days ) {
if(t < A[mouth] ) {
t++ ;
}else{
mouth++;
t = 1 ;
days -= A[mouth-1] ;
}
if ( mouth == 13 ) {
mouth = 1 ;
year++ ;
}
}
printf("%04d-%02d-%02d\n",year,mouth,t) ;
}
return 0 ;
}
结果如下: