我正在尝试编写一个计算租金账单的程序。我已经编写了大部分程序,但是我必须编写一个函数,该函数将用户输入的租用天数和起始租赁日期确定为返回日期。唯一的要求是该函数是一个调用另一个函数的循环(确定该月的天数)。我一直遇到的问题是,另一个功能(确定每个月的天数)不会根据月份而改变。因此,如果我放入2013年1月1日,它具有正确的月份天数,然后当计数器更改为2月时,它将持续31天。有没有人知道满足要求的公式?
答案 0 :(得分:3)
从硬编码数组开始,每个月的天数。 补偿2月的闰日,你应该很好。
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];
}
答案 1 :(得分:2)
为什么不考虑使用Boost.Date_Time?
答案 2 :(得分: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;
}
这会给你一个月的日子