Week2 #4 Tomorrow never knows?

编程题#4:Tomorrow never knows?

来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)

注意: 总时间限制: 1000ms 内存限制: 65536kB

描述

甲壳虫的《A day in the life》和《Tomorrow never knows》脍炙人口,如果告诉你a day in the life,真的会是tomorrow never knows?相信学了计概之后这个不会是难题,现在就来实现吧。

读入一个格式为yyyy-mm-dd的日期(即年-月-日),输出这个日期下一天的日期。可以假定输入的日期不早于1600-01-01,也不晚于2999-12-30。

 

输入

输入仅一行,格式为yyyy-mm-dd的日期。

 

输出

输出也仅一行,格式为yyyy-mm-dd的日期

 

样例输入

2010-07-05      

 

样例输出

2010-07-06      

提示

闰年的标准:

(1)普通年能被4整除且不能被100整除的为闰年。(如2004年就是闰年,1901年不是闰年)

(2)世纪年能被400整除的是闰年。(如2000年是闰年,1100年不是闰年)

可以利用一个字符变量吃掉输入的短横线(减号),输出时请活用setfill和setw 控制符。

 

 

#include<iostream>
#include<iomanip>
using namespace std;

int main() {
    int year;
    int month;
    int day;
    char str1;
    char str2;
    cin >> year >> str1 >> month >> str2 >> day;
    int next_month=0;
    int next_year=0;
    int next_day=0;
    int flag=0;//是否是闰年的标志
    if (((year % 100 == 0) && (year % 400 == 0)) || ((year % 100 != 0) && (year % 4 == 0)))
        flag = 1;
    if (month == 1) 
    {
        if (day < 31)
        {
            next_day = day + 1;
            next_year = year;
            next_month = next_month;
        }
        else 
        {
            next_month = month + 1;
            next_day = 1;
            next_year = year;
        }
    }
    if (month == 2) 
    {
        if (flag == 1) 
        {
            if (day < 29)
            {
                next_day = day + 1;
                next_year = year;
                next_month = month;
            }
            else 
            {
                next_month = month + 1;
                next_day = 1;
                next_year = year;
            }
        }
        else 
        {
            if (flag == 0)
            {
                if (day < 28) 
                {
                    next_day = day + 1;
                    next_month = month;
                    next_year = year;
                }
                else
                {
                    next_month = month + 1;
                    next_day = 1;
                    next_year = year;
                }
            }
        }
    }
        if (month == 3) 
        {
            if (day < 31)
            {
                next_day = day + 1;
                next_month = month;
                next_year = year;
            }
            else 
            {
                next_month = month + 1;
                next_day = 1;
                next_year = year;
            }
        }
        if (month == 4)
        {
            if (day < 30)
            {
                next_year = year;
                next_month = month;
                next_day = day + 1;
            }
            else
            {
                next_month = month + 1;
                next_day = 1;
                next_year = year;
            }
        }
        if (month == 5)
        {
            if (day < 31)
            {
                next_month = month;
                next_year = year;
                next_day = day + 1;
            }
            else
            {
                next_year = year;
                next_month = month + 1;
                next_day = 1;
            }
        }
        if (month == 6)
        {
            if (day < 30)
            {
                next_year = year;
                next_month = month;
                next_day = day + 1;
            }
            else
            {
                next_year = year;
                next_month = month + 1;
                next_day = 1;
            }
        }
        if (month == 7)
        {
            if (day < 31)
            {
                next_year = year;
                next_month = month;
                next_day = day + 1;
            }
            else
            {
                next_month=month+1;
                next_day = 1;
                next_year = year;
            }
        }
        if (month == 8)
        {
            if (day < 31)
            {
                next_day = day + 1;
                next_month = month;
                next_year = year;
            }
            else
            {
                next_year = year;
                next_month=month+1;
                next_day = 1;
            }
        }
        if (month == 9)
        {
            if (day < 30)
            {
                next_day = day + 1;
                next_year = year;
                next_month = year;
            }
            else
            {
                next_month=month+1;
                next_day = 1;
                next_year = year;
            }
        }
        if (month == 10)
        {
            if (day < 31)
            {
                next_day = day + 1;
                next_year = year;
                next_month = month;
            }
            else
            {
                next_month=month+1;
                next_day = 1;
                next_year = year;
            }
        }
        if (month == 11)
        {
            if (day < 30)
            {
                next_day = day + 1;
                next_month = month;
                next_year = year;
            }
            else
            {
                next_month=month+1;
                next_day = 1;
                next_year = year;
            }
        }
        if (month == 12)
        {
            if (day < 31)
            {
                next_day=day+1;
                next_month = month;
                next_year = year;
            }
            else
            {
                next_year=year+1;
                next_month = 1;
                next_day = 1;
            }
        }
        cout << next_year << str1 << setw(2) << setfill('0') << next_month << str2 << setw(2) << setfill('0') << next_day << endl;
        return 0;

}

代码写的又臭又长;中间错了好几次,改了好几次,这样写工作量太大,出错也难排错;考虑将每月的天数做成一个对应天数的数组,可能会简化一点,也许只需要做一次对月份的if判断就可以,具体还没有操作过。

上一篇:LeetCode——Customers Who Never Order(灵活使用NOT IN以及IN)


下一篇:Hadoop分布式安装详细步骤