5 银行存款到期日

问题描述 :

银行存款有3个月、6个月定期等。从键盘输入一个日期(即为存款日期)以及定期的时间长度(单位为月,输入的时间长度可为小于等于60的任意正整数),请编程输出该定期存款的到期日期。 下面以3个月定期为例,说明定期的概念。

比如:

输入2014年4月30日,则到期日是2014年7月30日;

输入2014年3月31日,则到期日是2014年6月30日(6月没有31日,所以30日就到期);

输入2014年11月30日,则到期日是2015年2月28日;

输入2015年11月30日,则到期日是2016年2月29日。

输入说明 :

共输入4个整数,中间以空格分隔,第一个整数表示年,第二个整数表示月,第三个整数表示日,第四个整数表示定期长度(单位为月)。

输出说明 :

输出到期日期,共输出三个整数,中间以一个空格分隔,行首与行尾均无空格。

输入范例 :2014 4 30 3

输出范例 :2014 7 30

 

思想:依次更新年份,月份,日期。

          1.年份:如果存款月+当前月大于12,除12后取结果累加当前年,如果不大于12,不处理。

          2.月份:如果如果存款月+当前月大于12,除12后取余替代当前月,如果不大于12,直接相加即可。

          3.日期:最麻烦的,使用上一题存储每个月的最后一天是几号,如果最后结果是闰年,还是更新2月日期。

        如果当前日期>更新后月份的最后一天,那么将其替换为当前月的最后一天。(符合案例:输入2014年3月31日,则到期日是2014年6月30日(6月没有31日,所以30日就到期))

 

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int year,month,date,during;
    int day[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    scanf("%d%d%d%d",&year,&month,&date,&during);
  
    if (month+during>12){
        year += (month+during)/12;
        month = (month+during)%12;
    }else{
        month += during;
    }
    if (year%4==0&&year%100!=0||year%400==0) 
    {
        day[1]++;
    }
     if (date > day[month-1]){
        date = day[month-1];
    }
    printf("%d %d %d",year,month,date);
    return 0;
}

 

 

 

上一篇:[LeetCode]1621. Number of Sets of K Non-Overlapping Line Segments 动态规划js版


下一篇:hive开发中实际的日期转换函数