OJ题:打印日期

题意:给出年分m和一年中的第n天,算出第n天是几月几号。

输入:

2000 3

2000 31

2000 40

2000 60

2000 61

2001 60

输出:

2000-01-03

2000-01-31

2000-02-09

2000-02-29

2000-03-01

2001-03-01

思路:如果输入的day小于月份对应的天数,那么day就是对应的天数;如果输入的day大于月份对应的天数,那么就用day减去月份对应的天数,得到的newday如果小于了月份对应的天数,则停止;如果还是大于对应的天数,则继续循环day减去月份对应的天数步骤,直到小于了则停止。

这里月份对应的天数:采用getmonthday函数来求解。

注意:1. 如果采用Data类来实现,构造函数的设计可以采用无参构造。

2. 核心打印函数的设计:循环过程中,循环变量控制的是月份(从1月到12月),如思路中的描述,如果day<getmonthday(),月份就增1。同时,循环变量还控制了getmonthday函数,否则就将循环变量复制给month,得到我们想要的month和day。

// 测试程序
int main()
{
    int year, n;
    while(cin >> year >> n)
    {
        Data d1;
        d1.print(year,n);  
    }
}
// 核心打印函数
void print(int year ,int n)
{
    int month = 1;
    for(int i = 1;i <= 12; i++)
    {
        if(n > getmonthday(year,i));
        {
            n = n - getmonthday(year ,i);
        }
        else
        {
            month = i;
            break;
        }
    }
    printf("%4d-%02d-%02d\n",year,month,n);
}
int getmonthday(int year ,int month)
{
    int monthday[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
    if(month == 2 && (year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
    {
        return 29;
    }
    else
        return monthday[month];
}
class Data
{    
public:
    Data()
    {}
    int getmonthday()
    {}
    void print()
    {}
private:
    int _year;
    int _month;
    int _day;
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值