UVa 893 - Y3K Problem
2015-10-08 21:41
148 查看
題目:給你當前的日期,問再過k天后的日期。
分析:數論,曆法,閏年判斷。四年一閏,百年不閏,四百年閏。
計算當前日期距離0年1月1日有多少天+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; }
相关文章推荐
- 南阳oj A+BproblemII Java 解决 题目103
- Django中关于url的用法
- 021-ARC与分类-OC笔记
- 020-OC内存管理-OC笔记
- 缩放图片
- LA 3667 Ruler 两种不同形式的搜索来解决
- DEDECMS修改文章TAG 给TAG加链接 去掉TAG字数限制
- c#遍历checkBox控件,并用MessageBox显示出来
- 卡榫函数实现API
- Leetcode87: Find Minimum in Rotated Sorted Array
- 019-OC特有语法-OC笔记
- 理解依赖注入(Dependency Injection)
- 剑指offer—把二叉树打印成多行
- break 和continue以及return的区别
- leetcode 21:Merge Two Sorted Lists(15-10-9)
- Generate Parentheses
- 018-继承-OC笔记
- 017-封装-OC笔记
- Sping面试题分析
- Ants (poj 3565 最小权匹配)