经典问题-打印日期万金油版本

发布时间 2024-01-06 13:04:44作者: 神奇的萝卜丝

这题有一个前人总结的终极优化版本。

思想其实也很简单。学起来也很快。优化了如果变成下一年的情况和闰年判断

#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 ;
}

结果如下: