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
原创代码:

#include <stdio.h>
#include <stdlib.h>
int run(int a)//判断是否为闰年
{
     if(a%400==0||(a%4==0&&a%100!=0))
    {
     return 1;
    }
    return 0;
}
int main()
{
    int a,b,c,n,year,month,day;
    scanf("%d %d %d %d",&a,&b,&c,&n);

    year=a+(b+n)/12;//nian
    month=b+n-(b+n)/12*12;//yue
//只管比自己小的31管30,29,28
    if(c==31) 
    {
        if(run(year))
        {
            if(month==2)
                c=29;
            else if(month==4||month==6||month==9||month==11)
                c=30;
        }
        else
        {
            if(month==2)
                c=28;
            else if(month==4||month==6||month==9||month==11)
                c=30;
        }
    }
 //30管29,28
     if(c==30)
    {
        if(run(year))
        {
            if(month==2)
                c=29;

        }
        else if(run(year)==0)
        {
            if(month==2)
                c=28;
        }
    }
   //29管28
    if(c==29)
    {
        if(run(year)==0)//平年
        {
            if(month==2)
                c=28;
        }
    }

    printf("%d %d %d",year,month,c);
    return 0;
}

另一个博主写法我觉得很好:

#include<stdio.h>
int main(){
   int y,m,d,t;
   int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
   //加0是为了后面的month[2]输入方便 
   while(scanf("%d %d %d %d",&y,&m,&d,&t)!=EOF){
   	m=m+t;
   	while(m>12){
   		m=m-12;y=y+1;
   	}
   	if((y%400)==0||(y%4==0&&y%100!=0)) month[2]++;
   	printf("%d %d %d\n",y,m,d<month[m]?d:month[m]);//?表示更方便 
   	
   }
   return 0;
}

来源于博主原博客
正常使用scanf(“%d%d”,&a,&b)只能输入一组,所以就要加上while循环语句。循环条件为读入不为EOF(文档结束符),可以手动输入ctrl+z跳出循环。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值