利用进位算天数、巧用二维数组保存平润二月

http://codeup.hustoj.com/problem.php?cid=100000578&pid=0

问题 A: 日期差值

[命题人 : 外部导入]

时间限制 : 1.000 sec  内存限制 : 32 MB
 

题目描述

有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。

输入

有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD

输出

每组数据输出一行,即日期差值

样例输入 Copy

20130101
20130105

样例输出 Copy

5
#include<bits/stdc++.h>
using namespace std;
const int maxn=105;
int isrun(int y){
    if(y%400==0||y%4==0&&y%100!=0)
        return 1;
    return 0;
}
//巧用二维数组保存平润二月
int month[13][2]={
   
   {0,0},{31,31},{28,29},{31,31},{30,30},
                        {31,31},{30,30},{31,31},{31,31},
                        {30,30},{31,31},{30,30},{31,31}};
int main(){
    int a,b;
    while(scanf("%d%d",&a,&b)!=EOF){
        int ans=1;
        if(a>b){
            int temp=a;a=b;b=temp;
        }
        int y1=a/10000,m1=a/100%100,d1=a%100;
        int y2=b/10000,m2=b/100%100,d2=b%100;
        //printf("%d %d %d\n%d %d %d\n",y1,m1,d1,y2,m2,d2);
        while(y1!=y2||m1!=m2||d1!=d2){//利用进位算天数
            d1++;
            if(d1==month[m1][isrun(y1)]+1){
                d1=1;
                m1++;
            }
            if(m1==13){
                y1++;
                m1=1;
            }
            ans++;
        }
        printf("%d\n",ans);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/ur_ytii/article/details/112345024