oj-計算兩個 日期之間的天數(默認第一個輸入比第二個輸入小---如需要可以加個判斷,)

#include "stdio.h"
/*
解題思路
1.先算出同一年下不同日期
2.再計算出相隔年下的不同日期
3.最終拓展計算所有的日期計算
*/ 
//判斷閏年平年函數
int is_leap(int year)
{
    if ((year%400==0)||(year%4==0&&year%100!=0))
    {
        return 1;
    }
    return 0;
    
}
//判斷並使用數組
int* type(int x,int* leap,int* nonleap) 
{
    if(x) {return leap;}
    return nonleap;

//計算同一年下的天數函數
int day1(int year1,int mon1,int day1,int mon2,int day2,int* leap,int* nonleap) 
{
    int i,j=0,same;
    int sum=0;
    int* year_type;
    //判斷類型 
    year_type = type(is_leap(year1),leap,nonleap);
    for(i = mon1+1;i<=mon2-1;i++)
    {
        j = j + year_type[i];
    }

    //判斷是否同一個月 
    same = mon1==mon2?0:mon1;
    sum = year_type[same] - day1 + j + day2;
    return sum;
}
//計算不同年份的函數
int day2(int year1,int year2,int mon1,int day1,int mon2,int day2,int* leap,int* nonleap) 
{
    int* year_type1;
    int* year_type2;
    int i,j1=0,j2=0,sum1=0,sum2=0,sum3=0,sum4=0;
    year_type1 = type(is_leap(year1),leap,nonleap);
    year_type2 = type(is_leap(year2),leap,nonleap);
    //計算年份一 
    for(i = mon1+1;i<=12;i++)
    {
        j1 = j1 + year_type1[i];
    }
    sum1 = year_type1[mon1] - day1 + j1 ;
    //計算年份二 
    for(i = 1;i<mon2;i++)
    {
        j2 = j2 + year_type2[i];
    }
    sum2 = day2 + j2 ;
    //計算間隔年 
    sum3 = day3(year1,year2);
    //計算總數 
    sum4 = sum1 + sum2 + sum3;
    return sum4;
}
//計算兩個年份中間的年份
int day3(int year1,int year2)
{
    int i,j=0,sum=0,x;
    for(i=year1+1;i<year2;i++)
    {
        
        //常識--閏年366,平年365 
        x = is_leap(i)==1?366:365;
        j = j + x;
        //printf("%d",j);
    }
    sum = j ;
    //printf("%d",year1-year2); 
    return sum;

int main()
{
    //同一年用day1------------不同用day2; 
    int y1,m1,d1,y2,m2,d2;
    int leap_year[] = {0,31,29,31,30,31,30,31,31,30,31,30,31};
    int nonleap_year[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
    scanf("%d-%d-%d",&y1,&m1,&d1);
    scanf("%d-%d-%d",&y2,&m2,&d2);
    if (y1==y2){printf("%d\n",day1(y1,m1,d1,m2,d2,leap_year,nonleap_year));}
    else{printf("%d\n",day2(y1,y2,m1,d1,m2,d2,leap_year,nonleap_year));}    
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章