整数除以零c ++

时间:2014-02-15 23:07:34

标签: c++

我必须编写一个程序,输入一个数字并输出它的最高除数,然后输出除数的最高除数,依此类推,直到达到一个素数。但我一直在努力: “primefinder.exe中0x00eb1504处的未处理异常:0xC0000094:整数除零。”

我猜它的“num%i”导致它,但“i”因为“num / 2”而不能为零。

#include <iostream>

using namespace std;

int main(){
    unsigned int i=666, num;
    cout << "Enter number";
    cin >> num;
    while(i>1){
        i = num/2;
        while(num % i == 0){
            i--;
        }
        cout << i << endl;
        num=i;
    }
    cin.get();
    return 0;
}

3 个答案:

答案 0 :(得分:1)

正如ooga在评论中提到的,由于整数数学,1/2(和0/2)将等于零。

要避免在此处除以0,请将cin >> num;更改为:

do
{
    cin >> num;
} while (num <= 1);

这将继续提示,直到输入有效数字。

编辑: Cornstalk's Answer正确地指出您必须使用i > 0 && num % i == 0保护最内层的循环。

答案 1 :(得分:1)

如果i为零,那么num % i可能会导致此错误。什么时候会发生?假设您将数字2作为输入。然后它执行为:

    i = num/2; // i is now (2 / 2) = 1
    while(num % i == 0){ // 2 % 1 = 0, so the loop continues
        i--; // i is now zero, so the next loop iteration will cause a division by zero!
    }

所以你需要这样做:

while(i > 0 && num % i == 0)

确保i永远不会为零。

答案 2 :(得分:0)

int main(){
    unsigned int i=666, num;
    cout << "Enter number";
    cin >> num;
    while(i>1){
        i = num/2;

为什么要用666初始化我,然后立即指定i=num/2

顺便说一句,“输入一个数字并输出它的最高除数,然后是除数的最高除数,依此类推”似乎是递归算法的一个很好的候选者。