C++ 整数除以零

Zeo*_*137 5 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;
}
Run Code Online (Sandbox Code Playgroud)

sch*_*574 1

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

为了避免此处被 0 除,请更改cin >> num;为:

do
{
    cin >> num;
} while (num <= 1);
Run Code Online (Sandbox Code Playgroud)

这将持续提示,直到输入有效的号码。

编辑: Cornstalk 的答案正确地指出你必须用 保护最里面的 while 循环i > 0 && num % i == 0