http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2191

题意:给你两个年月日,让你算出其中经历了多少天输出 。

思路 :这个题是一个大大的模拟,可惜比赛的时候我都卡了一个半小时,又回去改了好久脑子都废了。今早上才在二师兄的点播之下才知道,原来年月日不一定上边的小,所以要判断一下,我就是因为这个WA了十几遍。。。。T_T。。。。。。。

#include<stdio.h>
#include<cmath>
#include<iostream> using namespace std ; struct node
{
int year ;
int month ;
int date ;
} ch,sh; int is_leap(int n)
{
if(n% == ||(n%==&&n%!=))
return ;
return ;
} int main()
{
int sum = ;
int mon[] = {,,,,,,,,,,,,} ;
scanf("%d:%d:%d",&ch.year,&ch.month,&ch.date) ;
scanf("%d:%d:%d",&sh.year,&sh.month,&sh.date) ;
if(ch.year > sh.year)
{
swap(ch.year,sh.year) ;
swap(ch.month,sh.month) ;
swap(ch.date,sh.date) ;
} if(ch.year == sh.year)
{
if(ch.month > sh.month)
{
swap(ch.year,sh.year) ;
swap(ch.month,sh.month) ;
swap(ch.date,sh.date) ;
}
if(ch.month == sh.month)
sum += fabs(sh.date-ch.date) ;
else
{
for(int i = ch.month+ ; i < sh.month ; i++)
sum += mon[i] ;
sum += (mon[ch.month]+-ch.date) ;
sum += sh.date ;
sum -= ;
if(is_leap(ch.year)&&ch.month <= &&sh.month > )
sum++ ;
}
}
else
{
for(int i = ch.year+ ; i <= sh.year- ; i++)
{
sum+= ;
if(is_leap(i))
sum++ ;
}
if(ch.month != )
{
for(int i = ch.month+ ; i <= ; i++)
sum += mon[i] ;
if(ch.month <= &&is_leap(ch.year))
sum ++ ;
}
sum += (mon[ch.month]+-ch.date) ;
if(sh.month!= )
{
for(int i = ; i <= sh.month- ; i++)
sum+=mon[i] ;
if(sh.month > &&is_leap(sh.year))
sum++ ;
}
sum += sh.date- ;
}
printf("%d\n",sum) ;
return ;
}

当然还有一种做法,因为题目中是说年份是大于等于1900小于等于2038的,所以当你输入两个月份的时候,就以1900年01月01日为准,用两个年份分别算从1900年01月01日到他们的距离,再求差,当然了,因为上下两个年份不知道谁大谁小,所以要加绝对值,这种方法简单不易出错,代码量还小一半左右,想实现的可以试试哦

SDUT2191Calendar的更多相关文章

随机推荐

  1. C# 正则表达式(一)

    首先来复习一下正则表达式的基础知识,本篇文章分为2个部分,第一个部分复习正则表达式中的元字符和简写表达式,第二部分复习正则表达式的匹配和提取. 1.正则表达式中的元字符和简写表达式 ".&q ...

  2. 关于在windows7中使用Virtual Box 按照 安卓虚拟机几个注意事项

    1.选择安卓原生镜像的问题 选择带PC的字眼的,也就是给平板PC使用的那个,我使用的版本是android-x86-4.0-r1-eeepc.iso其他类似版本也是可以的,因为我已经成功实践啦. 下载地 ...

  3. DTCMS视频模版更改,

    1.去掉style.css中视频的高度 .video-box{ position:relative; width:100%; height:473px; _clear:both; _display:i ...

  4. TreeView递归取值

    string jingyuan = ""; string jinghui = ""; private void DiGui(TreeNode tn) { if ...

  5. C# Json数据反序列化为Dictionary并根据关键字获取指定值1

    Json数据: { "dataSet": { "header": { "returnCode": "0", " ...

  6. Java 多线程 锁 存款 取款

    http://jameswxx.iteye.com/blog/806968 最近想将java基础的一些东西都整理整理,写下来,这是对知识的总结,也是一种乐趣.已经拟好了提纲,大概分为这几个主题: ja ...

  7. [总结]Android系统体系结构

    Android 从图中可以看出Android主要的组成部分,其中底层是Linux的内核,包括的主要就是文件.内存.系统资源等的管理,Google在这部分的工作主要就是电源管理和一部分驱动,并且整合上层 ...

  8. Spark Streaming揭秘 Day35 Spark core思考

    Spark Streaming揭秘 Day35 Spark core思考 Spark上的子框架,都是后来加上去的.都是在Spark core上完成的,所有框架一切的实现最终还是由Spark core来 ...

  9. 深入理解jsavascript的作用域

    一. JavaScript声明提前 在JavaScript中如果不创建变量,直接去使用,则报错: console.log(xxoo); // 报错:Uncaught ReferenceError: x ...

  10. The content of element type "sqlMapConfig" is incomplete,

    The content of element type "sqlMapConfig" is incomplete, it must match "(properties? ...