标签:12 31 到期日 银行存款 month during 30 2014
问题描述 :
银行存款有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; }
标签:12,31,到期日,银行存款,month,during,30,2014 来源: https://www.cnblogs.com/End1ess/p/15929476.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。