-2

我需要用 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));
    }
}
4

4 回答 4

2

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

!是 , 的缩写notnot 2是一个布尔表达式,其中2(除了0) 是true

not truefalse

falseint在计算中被提升为 a并false变为0.

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

于 2021-01-11T18:06:35.260 回答
1

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

if (n >=1000 && n <= 9999 && (n % 2) != 0)
于 2021-01-11T18:05:51.420 回答
1

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

n / !2

这评估为n / 0。这会触发您的警告。

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

n % 2 != 0
于 2021-01-11T18:06:24.100 回答
0

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

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

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

于 2021-01-11T18:09:29.867 回答