我在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
吗?我用错了吗?或者这是一个完全不同的问题?
由于
答案 0 :(得分:7)
您没有专门针对atoi
的问题,但是您没有检查它是否正常工作。
真正的问题是你的程序在循环的第一次迭代中除以零。从x
开始2
:
for (int x = 2; x < maxX; x++)
你也必须从2
开始。从1
开始会告诉你所有的数字都是素数,这不是真的,可能不是你想要的。您可能需要一个特殊情况来处理0
和1
输入 - 它们不是素数,但会超出您当前的算法。
编辑抛开:有很多更快的方法可以检查一个数字是否为素数,如果这对您有用。
答案 1 :(得分:0)
你不想除以0,从2开始:
for (int x = 2; x < maxX; x++)