プログラミング問題#4:Tomorrow never knows?

4260 ワード

プログラミング問題#4:Tomorrow never knows?プレイヤーの心理状態でテスト


普段は自分のコードを発表する習慣はありませんが、今日は血の教訓ですね!!長い間見ても問題が見つからなかったので、テスト用例を使ってテストすることにしましたが、結局可能性を忘れてしまいました.それは、2014-02-29、うるう年のロジックばかり書いて、年越しのロジック、まさか...うるう日のロジックを忘れてしまったなんて...
原因をまとめると、穴があると思ったところを踏んで放さず、結局ずっと穴の中にいた...
#include 
#include 
#include 
#include 
using namespace std;

bool IsLeapYear( int year ){
    bool isLeap = false;
    if(year % 100 == 0 && year % 400 == 0)
        isLeap = true;

    if(year % 4 == 0 && year % 100 != 0)
        isLeap = true;

    return isLeap;
}

int main() {
    int year, month, day;
    scanf("%d-%d-%d", &year, &month, &day);

    int month_data[12] = {31,28,31,30,31,30,31,31,30,31,30,31};

    if(day >= month_data[month-1]){
        if( month == 12 ){
            year++;
            month = 1;
            day = 1;
        }
        else if(month == 2 ){
            if(IsLeapYear( year ) && day == 28)
                day = 29;
            else{
                month++;
                day = 1;
            }
        }
        else{
            month++;
            day = 1;
        }

    }
    else
        day++;

    printf("%d-%02d-%02d
"
, year, month, day); return 0; }

試験用例を添付して使用します://2004-02-28//1901-02-28//2000-02-28//1100-02-28//2005-12-31//2008-05-30//2005-03-03//2004-02-29