0

我在 C++ 中有以下函数:

#include <iostream>
#include <cmath>
#include <stdlib.h>    
bool isPrime(char myArr[])
{
    int myInt=atoi(myArr);
    int maxX=sqrt(myInt)+1;
    for(int x=0; x<maxX; x++)
    {
        if(!myInt%x)
            return false;
    }
    return true;
}

但是当我运行它时,Windows 会返回一个消息框,上面写着“Prime.c 已停止工作”我感觉它与使用有关,atoi尽管我不确定。应该atoi使用吗?我用错了吗?或者这是一个完全不同的问题?

谢谢

4

2 回答 2

7

atoi尽管您没有检查它是否正常工作,但您没有具体问题。

真正的问题是您的程序在循环的第一次迭代中除以零。开始x2

for (int x = 2; x < maxX; x++)

你也必须从 开始2。从 at 1will 告诉你,你所有的数字都是素数,这不是真的,可能不是你想要的。您可能需要一种特殊情况来处理01输入 - 它们不是主要的,但会超出您当前的算法。

除开编辑:有很多更快的方法来检查一个数字是否是素数,如果这对你有用。

于 2013-04-16T15:32:33.993 回答
0

您不想除以 0,从 2 开始:

for (int x = 2; x < maxX; x++)
于 2013-04-16T15:36:08.040 回答