注册 登录
编程论坛 C语言论坛

推算日期 感谢帮忙

AbduRahman1 发布于 2021-12-22 19:26, 2321 次点击
Description
输入三个正整数,分别代表一个日期的年,月,日,输出这个日期的后一天的年,月,日。

Input
输入三个正整数,分别代表一个日期的年,月,日。

Output
输出这个日期的后一天的年,月,日。

Samples
input
2007 2 28
output
2007 3 1
8 回复
#2
xianfajushi2022-01-12 15:06
只有本站会员才能查看附件,请 登录
#3
lin51616782022-01-13 10:00
回复 2楼 xianfajushi
显然 你没处理跨年的情况 输入 2020 12 31
这代码就错了
#4
不会游泳的虾2022-01-27 16:00
供参考:
程序代码:
#include <stdio.h>
class Date {
private:
    int year, month, day;
    int IsLeapYear(int y)
    {
        return ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0));
    }
    int DaysOfMonth(int y, int m)
    {
        int a[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
        if (IsLeapYear(y) && m == 2) return a[m - 1] + 1;
        return a[m - 1];
    }
public:
    Date(): year(2022), month(2), day(28) {}
    Date(int y,int m,int d):year(y),month(m),day(d){}
    void Show()const
    {
        printf("%d %d %d\n", year, month, day);//年-月-日 格式
    }
    Date IncOneDay()
    {
        Date tmp = *this;
        if (day == DaysOfMonth(year, month))
        {
            tmp.day = 1;
            if (month == 12){
                tmp.month = 1;
                tmp.year++;
            }
            else {
                tmp.month++;
            }
        }
        else {
            tmp.day++;
        }
        return tmp;
    }
};
int main()
{
    int y, m, d;
    Date* D;
    printf("input\n");
    scanf("%d%d%d", &y, &m, &d);
    D = new Date(y, m, d);
    printf("output\n");
    D->IncOneDay().Show();
    return 0;
}


[此贴子已经被作者于2022-1-27 16:05编辑过]

#5
白锦衣绣2022-02-20 09:39
回复 4楼 不会游泳的虾
可以问一下C语言里public有什么含义吗?或者说public有些什么具体含义?可以帮我详细解释一下吗?
#6
白锦衣绣2022-02-20 09:47
回复 4楼 不会游泳的虾
而且等不到输入,运行失败了
#7
rjsp2022-02-20 11:38
回复 5楼 白锦衣绣
public 是C++的,C没有class、public等等
#8
See_Sea2022-02-20 22:10
C++没关系,闰年二月的处理,和跨年的处理都有了,C代码也不难了。
#9
不会游泳的虾2022-02-21 08:51
回复 5楼 白锦衣绣
这是写成一个 Date 类的形式,如需要不是类的形式,只要把类定义的相关语句删除,函数写成带参的,然后在主函数里调用就可以了,算法都一样的。修改如下,供参考:
程序代码:
#include <stdio.h>
int IsLeapYear(int y)
{
    return ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0));
}
int DaysOfMonth(int y, int m)
{
    int a[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
    if (IsLeapYear(y) && m == 2) return a[m - 1] + 1;
    return a[m - 1];
}
void Show(int year,int month,int day)
{
    printf("%d %d %d\n", year, month, day);//年-月-日 格式
}
void IncOneDay(int *year,int *month,int *day)
{
    if ((*day) == DaysOfMonth(*year, *month))
    {
        (*day) = 1;
        if ((*month) == 12) {
            (*month) = 1;
            (*year)++;
        }
        else {
            (*month)++;
        }
    }
    else {
        (*day)++;
    }
}
int main()
{
    int y, m, d;
    printf("input\n");
    scanf("%d%d%d", &y, &m, &d);
    IncOneDay(&y, &m, &d);
    printf("output\n");
    Show(y, m, d);
    return 0;
}


[此贴子已经被作者于2022-2-21 09:11编辑过]

1