程序设计进阶 编程题#4:Tomrrow never knows?

来源:互联网 发布:手机玩lol软件 编辑:程序博客网 时间:2024/04/30 10:03
描述

甲壳虫的《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年不是闰年)



分析:

此题中需要注意如下几个要点:

  1. 月份的切换。若日不是该月最后一天,日直接加一即可;否则需要将月份加一,日重新设为一。
  2. 年份的切换。若日为该年的最后一天,则需要将日、月都重新设为一,而年份加一。
  3. 另外要注意闰年问题,即闰年的二月29天,而非闰年的二月28天。

代码如下:
#include<stdio.h>int f(int year,int month,int day){    if(month==1||month==3||month==5||month==7||month==8||month==10)    {        if(day<31)            day+=1;        else        {            month+=1;            day=1;        }    }    else if(month==4||month==6||month==9||month==11)    {        if(day<30)            day+=1;        else        {            month+=1;            day=1;        }    }    else if(month==2)    {        if(((year%4==0)&&(year%100!=0))||((year%100==0)&&(year%400==0)))        {            if(day<29)                day+=1;            else            {                month+=1;                day=1;            }        }        else        {            if(day<28)                day+=1;            else            {                month+=1;                day=1;            }        }    }    else    {        if(day<31)            day+=1;        else        {            year+=1;            month=1;            day=1;        }    }    printf("明天的日期为\n");    printf("%d %d %d",year,month,day);    return 0;}int main(){    int year,month,day;    printf("请分别输入年月日\n");    scanf("%d%d%d",&year,&month,&day);    f(year,month,day);    return 0;}


0 0
原创粉丝点击