HDU4545+计算日期
/*
计算过了D天后的日期
之前D天的日期
*/
#include<stdio.h>
int judge_year( int year ){
if( (year%4==0&&year%100!=0)||(year%400==0) )
return true;
else
return false;
}
int judge_month( int mon ){
if( mon==1||mon==3||mon==5||mon==7||mon==8||mon==10||mon==12 )
return true;
else
return false;
}
int main(){
int ca;
//freopen("cmp.txt","w",stdout);
scanf("%d",&ca);
while( ca-- ){
int n;
scanf("%d",&n); int year,mon,day;
year = 2013;
mon = 3;
day = 24;
int sum = n;
while( sum>0 ){
if( judge_year(year)==true ){ //printf("sum=%d,,year = %d,mon=%d,day=%d\n",sum,year,mon,day);
if( mon==2 ){
int left = 29-day;
if( sum>left ){
sum = sum-(left+1);
mon++;
day = 1;
}
else if( sum==left ){
sum = 0;
day = 29;
}
else {
day += sum;
sum = 0;
}
}
else if( judge_month( mon )==true ){
int left = 31-day;
if( sum>left ){
sum = sum-left-1;
mon++;
if( mon>12 ) {
year++;
mon = 1;
}
day = 1;
}
else if( sum==left ){
sum = 0;
day = 31;
}
else{
day += sum;
sum = 0;
}
}
else {
int left = 30-day;
if( sum>left ){
sum = sum-left-1;
mon++;
if( mon>12 ) {
year++;
mon = 1;
}
day = 1;
}
else if( sum==left ){
sum = 0;
day = 30;
}
else{
day += sum;
sum = 0;
}
} }//闰年
else{ if( mon==2 ){
int left = 28-day;
if( sum>left ){
sum = sum-left-1;
mon++;
day = 1;
}
else if( sum==left ){
sum = 0;
day = 28;
}
else {
day += sum;
sum = 0;
}
}
else if( judge_month( mon )==true ){
int left = 31-day;
if( sum>left ){
sum = sum-left-1;
mon++;
if( mon>12 ) {
year++;
mon = 1;
}
day = 1;
}
else if( sum==left ){
sum = 0;
day = 31;
}
else{
day += sum;
sum = 0;
}
}
else {
int left = 30-day;
if( sum>left ){
sum = sum-left-1;
mon++;
if( mon>12 ) {
mon = 1;
year++;
}
day = 1;
}
else if( sum==left ){
sum = 0;
day = 30;
}
else{
day += sum;
sum = 0;
}
} }//不是闰年
if( sum<=0 )
break;
}//向后D天的日期 printf("%04d/%02d/%02d ",year,mon,day);
year = 2013;
mon = 3;
day = 24;
sum = n;
while( sum>0 ){
if( judge_year( year )==true ){
if( sum>=366 ){
sum-=366;
year--;
}
else{
if( mon==3 ){
int left = day;
if( sum>=29 ){
sum-=29;
mon--;
}
else {
if( sum==left-1 ){
sum = 0;
day = 1;
}
else if( sum<left-1 ){
day -= sum;
sum = 0;
}
else {
sum -= left;
day = 29;
mon--;
}
}
}
else if( mon==5||mon==7||mon==10||mon==12 ){
int left = day;
if( sum>=30 ){
sum-=30;
mon--;
}
else {
if( sum==left-1 ){
sum = 0;
day = 1;
}
else if( sum<left-1 ){
day -= sum;
sum = 0;
}
else {
sum -= left;
day = 30;
mon--;
}
}
}
else {
int left = day;
if( sum>=31 ){
sum-=31;
mon--;
if( mon<=0 ){
year--;
mon=12;
}
}
else {
if( sum==left-1 ){
sum = 0;
day = 1;
}
else if( sum<left-1 ){
day -= sum;
sum = 0;
}
else {
sum -= left;
day = 31;
mon--;
if( mon==0 ){
mon = 12;
year--;
}
}
}
}
}
}//闰年
else {
if( sum>=365 ){
sum-=365;
year--;
}
else{
if( mon==3 ){
int left = day;
if( sum>=28 ){
sum-=28;
mon--;
}
else {
if( sum==left-1 ){
sum = 0;
day = 1;
}
else if( sum<left-1 ){
day -= sum;
sum = 0;
}
else {
sum -= left;
day = 28;
mon--;
}
}
}
else if( mon==5||mon==7||mon==10||mon==12 ){
int left = day;
if( sum>=30 ){
sum-=30;
mon--;
}
else {
if( sum==left-1 ){
sum = 0;
day = 1;
}
else if( sum<left-1 ){
day -= sum;
sum = 0;
}
else {
sum -= left;
day = 30;
mon--;
}
}
}
else {
int left = day;
if( sum>=31 ){
sum-=31;
mon--;
if( mon==0 ){
year--;
mon=12;
}
}
else {
if( sum==left-1 ){
sum = 0;
day = 1;
}
else if( sum<left-1 ){
day -= sum;
sum = 0;
}
else {
sum -= left;
day = 31;
mon--;
if( mon==0 ){
mon = 12;
year--;
}
}
}
}
}
}//不是闰年
if( sum<=0 ) break;
} printf("%04d/%02d/%02d\n",year,mon,day);
}
return 0;
}
HDU4545+计算日期的更多相关文章
- 计算日期时间 自动加1天 PHP计算闰年 java与PHP时间戳对比区别
昨天写一个同步数据库的模块 从一个数据库同步到另外一个数据库,因为数据较多,不可能一次性全部搬迁过去,所以就按照每天搬迁! 写了一个 模块,点击加1,只要点击一次,自动从A数据库取出1天的数据, 并 ...
- js计算日期相差的天数
在网站开发中,经常会遇到计算日期相差的天数,js 没有提供相应的方法,所以自己写一个,方便将来查看: 代码: function DateDiff(sDate1, sDate2, splitStr) { ...
- Java8中计算日期时间差
一.简述 在Java8中,我们可以使用以下类来计算日期时间差异: 1.Period 2.Duration 3.ChronoUnit 二.Period类 主要是Period类方法getYears(),g ...
- sqlserver计算日期
在网上找到的一篇文章,相当不错哦O(∩_∩)O~ 这是计算一个月第一天的SQL 脚本: SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) --当月的第一 ...
- MySQL计算日期的函数DATE_SUB(d,INTERVAL expr type)
MySQL计算日期的函数DATE_SUB(d,INTERVAL expr type) DATE_SUB(d,INTERVAL expr type)函数返回起始日期d减去一个时间段后的日期. expr是 ...
- PostgreSQL 当月最后一天的工作日 , 计算日期是星期几
可以用pg自带函数select extract(dow from current_date),之所以没用主要是展示一下通过数学方法计算日期的原理. drop function if exists ge ...
- Java程序设计——反转字符串 & 找朋友 & 计算int型二进制1的个数 & 情报加密 & 计算日期 & 求近似数 & 输出较小数(练习1)
作为刚刚入门Java的选手,其实C++的功底起到了很大的作用.但是,Java之于C++最大的不同,我个人认为,是其类的多样性.才入门的我,写着老师布置的简单的面对过程的题,如果是C++,可以算是简单了 ...
- 按年、季度、月分组&&计算日期和时间的函数
Mysql 按年.季度.月分组 按月度分组: select DATE_FORMAT(i.created_at, '%Y-%m月')...................GROUP BY DATE_FO ...
- JavaScript计算日期间隔以及结果错误(少一天)的解决方法
下面的代码是之前从网上某个地方COPY下来的,之前一直用着,前段时间DateDiff()方法突然出问题了,输入两个日期2015-10-01 和 2015-10-02之后,计算出来的日期是0!如果只有几 ...
随机推荐
- js解决网页无法复制文字的问题
碰到有些网站,站长禁止了右键,或者用其它方法不让复制网页的文字,弄的好烦人啊,虽然这是小把戏,但多多少少造成了一些不方便,前几天发现这个解决不能复制问题的小方法,一行代码即搞定,就是下面这行: jav ...
- IIS7.5 APPCMD 简单用法及示例
1 添加应用程序进城池 appcmd.exe add apppool /name:test.com /managedRuntimeVersion:"v4.0" /managed ...
- 【行为型】Command模式
命令模式是指将用户的请求封装成(命令)对象,从而可将用户不同的请求进行参数化.对这些请求排序或记录请求日志.以及支持回滚恢复操作.记得以前刚开始使用Photoshop时,就发现它的操作历史记录面板特别 ...
- MySQL触发器之审计功能(转)
[导读] 最近ITPUB技术论坛特意组织网络性讨论活动,关于数据库审计的话题,分享各自公司如何实现数据库审计.个人经验和构想,以及数据库审计的技巧,刚好有网友发了一个典型的审计需求,要帮他分析,以及教 ...
- UIApplication-备用
iPhone应用程序是由主函数main启动,它负责调用UIApplicationMain函数,该函数的形式如下所示: int UIApplicationMain ( int argc, char *a ...
- 09 - 删除vtkDataObject中的ShouldIReleaseData() and ReleaseDataFlag 方法 VTK 6.0 迁移
VTK6 引入了许多不兼容的变.其中之一是删除vtkDataObject中所有有关管道的方法.下面列出来的就是其中的一些方法: ShouldIReleaseData() SetReleaseDataF ...
- Android Activity设置为全屏的方法
1:代码方式: 放到setContentView之前 //隐藏标题栏 this.requestWindowFeature(Window.FEATURE_NO_TITLE); //隐藏状态栏 this. ...
- Mediator pattern(c++ 实现)
概述: 假设我们开发一个图片处理软件,里面肯定包括很多相关功能,比如说剪切,旋转,滤镜,美化等等,而我们这些功能所要处理的对象是固定的,就是我们所显示的那张图片.但是我们不能把所有的功能罗列到一个ta ...
- HDU_2035——求A^B的最后三位数
Problem Description 求A^B的最后三位数表示的整数.说明:A^B的含义是“A的B次方” Input 输入数据包含多个测试实例,每个实例占一行,由两个正整数A和B组成(1< ...
- CF-Mr. Kitayuta's Colorful Graph
B. Mr. Kitayuta's Colorful Graph time limit per test 1 second memory limit per test 256 megabytes in ...