CF 304B——Calendar——————【年月日计算】

B - Calendar

Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u

Submit Status Practice CodeForces 304B

Appoint description: 
System Crawler  (2015-05-23)

Description

Calendars in widespread use today include the Gregorian calendar, which is the de facto international standard, and is used almost everywhere in the world for civil purposes. The Gregorian reform modified the Julian calendar‘s scheme of leap years as follows:

Every year that is exactly divisible by four is a leap year, except for years that are exactly divisible by 100; the centurial years that are exactly divisible by 400 are still leap years. For example, the year 1900 is not a leap year; the year 2000 is a leap year.

In this problem, you have been given two dates and your task is to calculate how many days are between them. Note, that leap years have unusual number of days in February.

Look at the sample to understand what borders are included in the aswer.

Input

The first two lines contain two dates, each date is in the format yyyy:mm:dd (1900 ≤ yyyy ≤ 2038 and yyyy:mm:dd is a legal date).

Output

Print a single integer — the answer to the problem.

Sample Input

Input

1900:01:012038:12:31

Output

50768

Input

1996:03:091991:11:12

Output

1579

题目大意:问你在这两个时间内有多少天。
#include<bits/stdc++.h>
using namespace std;
int LeapY[12]={31,29,31,30,31,30,31,31,30,31,30,31};
int ULeapY[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int sum;
bool judge(int year){
    if(year%400==0||(year%4==0&&year%100!=0))
        return true;
    return false;
}
int main(){
    int i,yst,mst,dst,yen,men,den,stsum,tmp;
    while(scanf("%d:%d:%d",&yst,&mst,&dst)!=EOF){
        scanf("%d:%d:%d",&yen,&men,&den);
        if(yst>yen){
           swap(yst,yen);
           swap(mst,men);
           swap(dst,den);
        }
        else if(yst==yen){
            if(mst>men){
                swap(mst,men);
                swap(dst,den);
            }else if(mst==men){
                if(dst>den){
                  swap(dst,den);
                }
            }
        }
        sum=stsum=0;
        if(judge(yen)){
            for(i=1;i<men;i++){
                sum+=LeapY[i-1];
            }
            sum+=den;
        }else{
            for(i=1;i<men;i++){
                sum+=ULeapY[i-1];
            }
            sum+=den;
        }
        if(judge(yst)){
            for(i=1;i<mst;i++){
               stsum+=LeapY[i-1];
            }
            stsum+=dst;
            sum=sum+366-stsum;
        }else{
            for(i=1;i<mst;i++){
                stsum+=ULeapY[i-1];
            }
            stsum+=dst;
            sum=sum+365-stsum;
        }
        for(i=yst+1;i<yen;i++){
            if(judge(i)){
                sum+=366;
            }else{
                sum+=365;
            }
        }
        if(yst==yen){
            if(judge(yst)){
                sum-=366;
            }else{
                sum-=365;
            }
        }
        printf("%d\n",sum);
    }
    return 0;
}
/*
1999:03:02
1999:03:01
2000:03:03
2000:03:01

1999:03:05
1999:05:05

2000:03:05
2000:05:05

1999:01:01
1999:01:01

*/

  

时间: 2024-10-23 21:35:38

CF 304B——Calendar——————【年月日计算】的相关文章

输入年月日计算是星期几

偶然的机会看到了一个计算星期几的算法,感觉很怪异并且很有意思就记录一下,也与大家共勉.自己写的代码有些瑕疵,但重点是计算星期的算法值得思索. 问题:输入年月日计算是星期几? 代码如下: #include <stdio.h>int getWeek(int year, int month, int day){ int aWeek[12] = {0,3,2,5,0,3,5,1,4,6,2,4}; int week = 0; int temp = 0; if(year < 1 || month

输入年月日计算出是该年的第多少天

插件和工具介绍内容均收集于网络,太多了就不一一注明了,在此谢过! 1.Charles 为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析.Charles通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析.一个可查看所有HTTP和SSL/HTTPS流量的工具.这款工具对于你测试和服务器端进行交互的应用非常有用 2.xScope xScope带有六种不同的工具,帮助每一个设计者快速.精确的完成工作,这些工具功能灵活.强大,包括∶量

08--MOOC--C/C++ 根据年月日计算星期几——蔡勒公式篇

C/C++ 根据年月日计算星期几——蔡勒公式篇 蔡勒公式  蔡勒(Zeller)公式:是一个计算星期的公式.随便给一个日期,就能用这个公式推算出是星期几.蔡勒公式如下:W = [C/4] - 2C + y + [y/4] + [13 * (M+1) / 5] + d - 1或者是:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1公式中的符号含义如下:w:星期: w对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六c:世纪-1(前两

java日期间相隔年月日计算

/**     * 获取date1相距date2多少天, date2>date1     * @param date1     * @param date2     * @return     * @throws ParseException     */    public static int getDaysSpace(String date1,String date2){        Calendar cal = Calendar.getInstance();        cal.se

蔡勒公式——根据年月日计算星期几

蔡勒(Zeller)公式,是一个计算星期的公式,随便给一个日期,就能用这个公式推算出是星期几. 计算公式 由于罗马教皇搞了一些骚操作,这里给出的公式仅适用于1582年10月15日以后的星期,详情可参考 格里高利历 符号意义 w:星期: w对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六 c:世纪(注:一般情况下,在公式中取值为已经过的世纪数,也就是年份除以一百的结果,而非正在进行的世纪,也就是现在常用的年份除以一百加一:不过如果年份是公元前的年份且非

An problem about date 根据年月日计算 星期几

/W = (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7(1.2月需要看作上一年的13.14月) #include<stdio.h> #include<string.h> #include<math.h> #include<iostream> #include<algorithm> #include<queue> #include<vector> #include<set>

P219 输入年月日计算是该年的第几天

#include<stdio.h>int main(){ int year,month,day; scanf("%d%d%d",&year,&month,&day); int runian(int month,int day); int frunian(int month,int day); if((year%4==0)&&(year%100!=0)) printf("%d\n",runian(month,day)

通过出生年月日按要求计算年龄的算法

最近项目里碰到个需求,有关于出生年月日计算年龄的,无奈网上搜了搜,感觉都不满足客户的需求只得自己动手了. 不废话,上需求 上算法: 类似于上面这个 yyyy-MM-dd 给一个这个值 算出来了多大年龄 l 不足一月新生儿显示日龄.2 不足一年婴幼儿显示月龄+日龄,如3个月12天.3 超过1周岁到12周岁,显示年龄+月龄,如12岁3个月. public static String getAgeAchen(Context context, Calendar birthday, Calendar no

Java 根据年月日精确计算年龄

1 import java.text.SimpleDateFormat; 2 import java.util.Calendar; 3 import java.util.Date; 4 5 /** 6 * Created by qing on 2017/3/28. 7 */ 8 public class AgeUtils { 9 // 根据年月日计算年龄,birthTimeString:"1994-11-14" 10 public static int getAgeFromBirthT