模数

时间:2016-10-07 21:56:47

标签: c++ function modulo

我很困惑,为什么Visual Studios在century)之后% 7;之前需要分号。它说我犯了语法错误。但是我想把整个事情放在括号中,然后对模7进行模数化。

int determineDay(int month, int day, int year) {
    const int HUNDRED_YEARS = 100;
    int newYear = year % HUNDRED_YEARS;
    int century = (year - newYear) / HUNDRED_YEARS;

    if (month == 1) {
        const int ONE_YEAR = 1;
        month = 13;
        year = year - ONE_YEAR;
        int zellerNumber = (day + floor((13 * (month + 1)) / 5)) + year
            + floor(year / 4) + floor(century / 4) + 5 * century) % 7;
        return zellerNumber;
    }
    else if (month == 2) {
        const int ONE_YEAR = 1;
        month = 14;
        year = year - ONE_YEAR;
        int zellerNumber = (day + floor((13 * (month + 1)) / 5)) + year
            + floor(year / 4) + floor(century / 4) + 5 * century) % 7;
        return zellerNumber;
    }
    else {
        int zellerNumber = (day + floor((13 * (month + 1)) / 5)) + year
            + floor(year / 4) + floor(century / 4) + 5 * century) % 7;
        return zellerNumber;
    }

}

1 个答案:

答案 0 :(得分:3)

正如其他人所说,你在day之前缺少一个左括号。

添加到此...

这是一个小的语法错误,但如果您不努力简化逻辑,它们将继续发生。请注意,if-else-if的所有路径中都会显示以下内容:

int zellerNumber = (day + floor((13 * (month + 1)) / 5)) + year
    + floor(year / 4) + floor(century / 4) + 5 * century) % 7;

就像数学一样,你可以“考虑”这一点。既然您知道计算zellerNumber的逻辑是相同的,无论情况如何(只有变量发生变化),您都可以将其移到if-else-if下方。这也将允许您只有一个return语句。通常,你应该以此为目标。

简化您的逻辑,您将看到更少的语法错误,并且您遇到的错误将更容易找到。