#7805: C++的AC代码分享


what_ (看毛看啊)

學校 : 福建省福州第十九中学
編號 : 32688
來源 : [220.160.30.125]
最後登入時間 :
2013-08-05 09:25:45
a263. 日期差幾天 -- 板橋高中練習題 | From: [27.155.245.84] | 發表日期 : 2013-05-30 22:14

#include <stdio.h>
 
bool isleapyear(int y){
    return (y % 4 == 0 && y % 100 || y % 400 == 0);
}
int sum(int y, int m, int d){
    int md[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int cnt = y * 365;
    cnt += (y - 1) / 4 + 1;
    cnt -= (y - 1) / 100 + 1;
    cnt += (y - 1) / 400 + 1;
    for(int i = 1; i < m; ++i) cnt += md[i];
    if(m > 2 && isleapyear(y)) ++cnt;
    cnt += d;
    return cnt;
}
int Count(int y1, int m1, int d1, int y2, int m2, int d2){
    return sum(y2, m2, d2) - sum(y1, m1, d1);
}
 
int main(){
    int y1, m1, d1, y2, m2, d2;
    while(scanf("%d%d%d%d%d%d", &y1, &m1, &d1, &y2, &m2, &d2) == 6){
        if (Count(y1, m1, d1, y2, m2, d2)>=0)
            printf("%d\n", Count(y1, m1, d1, y2, m2, d2));
        else
            printf("%d\n", -(Count(y1, m1, d1, y2, m2, d2)));
    }
    return 0;
#8721: Re:C++的AC代码分享


Anonymous (Andrew)

學校 : 國立臺東大學
編號 : 39309
來源 : [140.125.201.87]
最後登入時間 :
2015-03-01 21:55:34
a263. 日期差幾天 -- 板橋高中練習題 | From: [210.240.163.160] | 發表日期 : 2014-03-22 00:28

能給個解說嗎?? 
#10743: Re:C++的AC代码分享


avengertree (否放)

學校 : 大葉大學
編號 : 28345
來源 : [106.105.103.37]
最後登入時間 :
2021-08-01 20:13:54
a263. 日期差幾天 -- 板橋高中練習題 | From: [111.242.51.134] | 發表日期 : 2016-02-29 03:48

能給個解說嗎??

#include <iostream>

#include <algorithm>

#include <cmath>

using namespace std;

 

int Month[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};

int year1 , year2 , month1 , month2 , day1 , day2;

 

bool leap_year(int y)//判斷是否為閏年

{

    if (y%4000 == 0)    return false;

    else if (y%400 == 0)return true;

    else if (y%100 == 0)return false;

    else if (y%4 == 0)  return true;

    else return false;

}

int totalDay(int y , int m , int d)//計算日子的總數

{

    int sum=0;

    for (int i=1 ; i<y ; i++)//計算過了多少年,總共有多少日子

    {

        if (leap_year(i)==true)sum+=366;

        else sum+=365;

    }

    for (int i=1 ; i<m ; i++)//計算這年過了幾個月,總共多少日子

    {

        sum+=Month[i];

        if (i==2 && leap_year(y)==true)sum+=1;

    }

    sum+=d;//加上目前的日子

 

    return sum;

}

 

int main()

{

    while (cin >> year1 >> month1 >> day1 >> year2 >> month2 >> day2)

    {

        cout << abs(totalDay(year1,month1,day1) - totalDay(year2,month2,day2)) << endl;

    }

return 0;

}


有什麼更好的意見可以提出來參考
此程式碼完全是邊想邊寫
沒有優化過>_<



 
ZeroJudge Forum