-2

我正在尝试编写一个计算租金账单的程序。我已经编写了大部分程序,但我必须编写一个函数,该函数需要用户输入租用天数和开始租用日期来确定归还日期。唯一的要求是该函数是一个调用另一个函数(确定该月的天数)的循环。我一直遇到的问题是另一个函数(即确定每个月的天数)不会因月份而改变。因此,如果我输入 2013 年 1 月 1 日,则该月的天数是正确的,然后当计数器更改为 2 月时,它会继续 31 天。有谁知道可以满足要求的公式?

4

3 回答 3

3

从一个包含每月天数的硬编码数组开始。补偿二月的闰日,你应该会很好。

int daysInMonth(int month, int year)
{
    // Check for leap year
    bool isLeapYear;
    if (year % 400 == 0)
        isLeapYear = true;
    else if (year % 4 == 0 && year % 100 != 0)
        isLeapYear = true;
    else
        isLeapYear = false;

    int numDaysInMonth[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
    if (isLeapYear)
        numDaysInMonth[1]++;
    return numDaysInMonth[month - 1];
}
于 2013-08-20T18:12:16.080 回答
2

为什么不考虑使用Boost.Date_Time

于 2013-08-20T17:04:18.707 回答
0
int isLeap(int year)
{ 
    return (year > 0) && !(year % 4) && ((year % 100) || !(year % 400));
}

int calcDays(int month, int year)
{
    static const int daysInMonth[2][13] = {
        { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
        { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } };

    if (month >= 1 && month <= 12) {
        return daysInMonth[isLeap(year)][month - 1];
    }
    return -1;
}

这会给你一个月的日子

于 2013-08-20T18:08:54.957 回答