我在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;
}
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时,Windows返回一个消息框,说"Prime.c已停止工作"我觉得它与使用有关,atoi虽然我不确定.应该atoi用吗?我用错了吗?或者这是一个完全不同的问题?
谢谢
atoi虽然您没有检查它是否正常工作,但您没有具体问题.
真正的问题是你的程序在循环的第一次迭代中除以零.开始x于2:
for (int x = 2; x < maxX; x++)
Run Code Online (Sandbox Code Playgroud)
你也必须从头开始2.从头开始1会告诉你所有的数字都是素数,这不是真的,可能不是你想要的.您可能需要一个特殊的案例来处理0和1输入 - 它们不是素数,但会超出您当前的算法.
编辑抛开:有很多更快的方法可以检查一个数字是否为素数,如果这对您有用.