- 常见日期类问题解法
大多数有关日期的编程题都是知二求一。如下图的知道日期A、天数,然后让求日期B。
例:
题目描述:
给出年份m和一年中的第n添,算出第n天是几月几号。
输入:
输入包括俩个整数y和n。
输出:
可能有多组测试数据,对于每组数据,按格式yyyy-mm-dd将输入的日期打印出来。
样例输入:
2000 3
2000 31
2000 40
样例输出:
2000-01-03
2000-01-31
2000-02-09
代码如下:
1 # include <iostream> 2 # include <cstdio> 3 4 using namespace std; 5 bool Isyear ( int year){ 6 return (year % 4 == 0 && year % 100 != 0)|| (year % 400 == 0) ; 7 //return true; 8 //else return false; 9 }//判断是否为闰年 10 int daytab[2][13] = { 11 {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, 12 {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, 13 }; //闰年平年 14 int main(){ 15 int year , month , day , number ; 16 while ( scanf ( " %d %d", &year , &number) != EOF){ 17 int row = Isyear( year ) ; 18 month = 0 ; 19 while ( number > daytab[row][month]){ 20 number -= daytab[row][month]; 21 month ++; 22 } 23 day = number ; 24 printf ( "%04d-%02d-%02d\n", year ,month ,day); 25 } 26 }
其余类似的问题都可参照此题解答。