UVa 893 - Y3K Problem

来源:互联网 发布:农村淘宝亏了好几万 编辑:程序博客网 时间:2024/04/28 04:10

題目:給你當前的日期,問再過k天后的日期。

分析:數論,曆法,閏年判斷。四年一閏,百年不閏,四百年閏。

            計算當前日期距離0年1月1日有多少天+k天后從新計算日期即可。

說明:╮(╯▽╰)╭。

#include <cstdlib>#include <cstdio>int month[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};int baseday(int D, int M, int Y){int sum = D;for (int i = 0; i < Y; ++ i)if (i%4 == 0 && i%100 != 0 || i%400 == 0)sum += 366;else sum += 365;for (int i = 0; i < M; ++ i)sum += month[i];if (Y%4 == 0 && Y%100 != 0 || Y%400 == 0)if (M > 2)sum ++;return sum;}int main(){int days, D, M, Y;while (~scanf("%d%d%d%d",&days,&D,&M,&Y) && Y) {days += baseday(D, M, Y);for (Y = 0; ; ++ Y) {if (Y%4 == 0 && Y%100 != 0 || Y%400 == 0) {if (days <= 366)break;else days -= 366;}else if (days <= 365)break;else days -= 365;}for (M = 1; M <= 12; ++ M)if (M == 2) {if (Y%4 == 0 && Y%100 != 0 || Y%400 == 0) {if (days > 29) days -= 29;else break;}else if (days > 28)days -= 28;else break;}else if (days > month[M])days -= month[M];else break;printf("%d %d %d\n",days,M,Y);}return 0;}


0 0
原创粉丝点击