博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU-4515 小Q系列故事——世界上最遥远的距离 模拟
阅读量:6480 次
发布时间:2019-06-23

本文共 1461 字,大约阅读时间需要 4 分钟。

题意:告诉某一天,然后往前和后各推一定天数,输出计算之后的日期。

解法:一天一天模拟,日期的在各个位的进制不尽相同。

代码如下:

#include 
#include
#include
#include
using namespace std;int month[13] = {
31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};bool leap(int y) { return (y%4==0 && y%100!=0) || (y%400==0);}int getdays(int y, int m) { if (leap(y) && m == 2) return 29; return month[m];}struct Data { int y, m, d; Data():y(2013),m(3),d(24){} const Data & sub(int days); const Data & add(int days); void show() const;};void Data::show() const { printf("%04d/%02d/%02d", y, m, d); }const Data & Data::sub(int days) { // 每次减去一天 while (days--) { d -= 1; if (d == 0) { d += getdays(y, m-1); m -= 1; } if (m == 0) { m = 12; y -= 1; } } return *this;}const Data & Data::add(int days) { while (days--) { d += 1; if (leap(y)&&m==2&&d==29) {} else if (d > month[m]) { d = 1; m += 1; } if (m == 13) { m = 1; y += 1; } } return *this;}int main() { int T, days; scanf("%d", &T); while (T--) { Data m1, m2; scanf("%d", &days); m1.add(days).show(); printf(" "); m2.sub(days).show(); puts(""); } return 0; }

 

转载于:https://www.cnblogs.com/Lyush/archive/2013/03/24/2978230.html

你可能感兴趣的文章
PHP操作redis详细讲解
查看>>
EHCache的使用
查看>>
程序员的出路之一
查看>>
JavaScript 检查库
查看>>
viewPager的OnPageChangeListener监听器的方法调用顺序
查看>>
如何在 CentOS 上启用 软件集 Software Collections(SCL)
查看>>
Servlet-Cookie
查看>>
在spark集群上运行自己的java程序
查看>>
Android学习笔记(一)
查看>>
Java 提高篇(一)
查看>>
-webkit-text-size-adjust
查看>>
虚拟化学习笔记
查看>>
浏览器的兼容性问题
查看>>
我的友情链接
查看>>
Json字符串转复杂对象
查看>>
我的友情链接
查看>>
cocos2dx-3.0 android限帧问题
查看>>
今天真的搬走了
查看>>
PC散热风扇之研究一:风扇种类介绍
查看>>
关于Session和Cookie简单实例
查看>>