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