【问题标题】:Modulus operator in cc中的模运算符
【发布时间】:2011-12-29 20:50:29
【问题描述】:

我需要检查 c 中一个数字的整除性。如何使用 C 中的模数运算来检查一个数字是否可以被另一个数字整除?我试过这样做:

if (file_int % 3) {
    printf("Hoppity \n");
}

虽然 file_int 等于 9,但它不起作用。

我做错了什么?

谢谢

【问题讨论】:

    标签: c++ c math modulus


    【解决方案1】:

    它不起作用,因为该操作将返回 0,这将被视为 false。

    你实际上需要:

    if(!(file_int % 3)) {
        printf("Hoppity \n");
    }
    

    【讨论】:

    • 你能澄清一下吗?
    • 确实如此。如果它是可整除的,则余数应为 0(等于 false)因此,您可以使用 if (!(num % divisor))if ((num % divisor) == 0)(基本上将错误结果反转为真实条件。)
    • file_int % 3 等于file_int % 3 != 0,这是不可分割被3的条件。可分割被3是file_int % 3 == 0,或等同于!(file_int % 3).
    • 模运算符为您提供除法后的余数。如果一个数可以被另一个数整除,则余数为 0。if() 条件将此视为错误条件(任何非零都为真),因此后续行实际上不会执行。
    • @AhmadGaffoor 您需要一个逻辑与 (&&),而不是逗号运算符。 if (file_int % 5 == 0 && file_int % 3 == 0)
    【解决方案2】:

    if (file_int % 3)if (file_int % 3 != 0) 相同,与你想要的相反。

    if (file_int % 3 == 0) {
        printf("Hoppity \n");
    }
    // or
    if (!(file_int % 3)) {
        printf("Hoppity \n");
    }
    

    【讨论】:

      【解决方案3】:

      如果取模的结果为0,则可以整除。看起来您正在寻找它不能被 3 整除以继续循环,尽管您的代码 sn-p 不足以自信地假设您的意图。

      【讨论】:

        【解决方案4】:

        因为如果它可以被 3 整除,file_int % 3 将等于 0,并且 if 块不会执行。

        试试

        if(file_int % 3 == 0) {
            // do stuff
        }
        

        【讨论】:

          【解决方案5】:

          mod 运算符返回除法所得的余数...因为 9 可被 3 整除且没有余数,所以返回值为零。

          但是,如果非零,条件语句的计算结果为真,如果为零,则为假。您需要将其更改为(file_int % 3 == 0)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-05-31
            • 2021-02-23
            • 2011-03-26
            • 2012-07-16
            • 2012-08-18
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多