【问题标题】:C++ problems with division [closed]除法的C ++问题[关闭]
【发布时间】:2021-04-16 17:02:16
【问题描述】:

我需要用 C++ 编写一个程序,在该程序中我在控制台中插入一个 4 位数字“n”,它是一个简单的数字,控制台向我显示某个数字与 4 位数字的乘法,我首先需要写。 我尝试编写 (n/!2) 以使程序仅在数字不能除以 2 并且控制台显示 "main.cpp:22:36: warning: division by zero [-Wdiv-by-zero]". 时才执行 我试过删除 (n /! 2) 并且代码执行没有问题。如果有人能告诉我如何解决它,我会很高兴。

#include <bits/stdc++.h>
#include <iostream>
#include <stdlib.h>
using namespace std;
int getProduct(int n)
{
    int product = 1;
    while (n != 0) {
        product = product * (n % 10);
        n = n / 10;
    }
    return product;
}
int main()
{
    int n;
    cout << "insert n ";
    cin >> n;
    if (n >= 1000 && n <= 9999 && n /! 2) {
        cout << (getProduct(n));
    }
}

【问题讨论】:

  • 我无法编译这个。请阅读Why should I not #include &lt;bits/stdc++.h&gt;?
  • 这个(n /! 2) 是什么意思?
  • @Slava (n /! 2) 与 !+ 或 !- 相同,但我希望有除法。我尝试添加!之前/但它给了我另一个错误:在'!'令牌之前预期')'
  • @ТодорСлавов !+!- 并不是什么特别的东西。在整数上使用! 会将整数视为bool,其中除了0 之外的任何内容都是true (1) 和0false (0)。 ! 将其反转,因此 true 变为 false,反之亦然。当 bool 在算术上下文中使用时(例如在除法中),它被提升为 int(0 或 1)。在这种情况下0.
  • "(n /! 2) 与 !+ 或 !- 相同,但有除法" 恐怕你不明白 !+!- 的作用。您需要学习该语言的基础知识,而不是自行理解 C++ 中的操作方式

标签: c++ division integer-division divide-by-zero floor-division


【解决方案1】:

您正在寻找模运算。如果数字可以被另一个整除,则模(除法的余数)等于零,否则为非零。

if (n >=1000 && n <= 9999 && (n % 2) != 0)

【讨论】:

    【解决方案2】:

    试图写 (n/!2) 以使程序仅在数字不能被 2 整除时才执行

    n / !2
    

    计算结果为n / 0。这会触发您的警告。

    要检查n 是否为奇数,您应该这样做:

    n % 2 != 0
    

    【讨论】:

      【解决方案3】:

      在计算n / !2 你有效地做n / 0

      !not 的缩写,not 2 是一个布尔表达式,其中2(除0 之外的任何内容)是true

      not truefalse

      false 在计算中提升为intfalse 变为0

      解决方案:使用n % 2 != 0n &amp; 1 来检查奇数。

      【讨论】:

        【解决方案4】:

        !运算符的优先级高于 / ,因此您的表达式变为

        => n/(!2) => n/0

        您应该使用 (n%2==0) 来检查偶数。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-11-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-29
          • 2017-08-20
          • 1970-01-01
          • 2022-06-15
          相关资源
          最近更新 更多