Использование atoi Stack Overflow

У меня есть следующая функция в 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

Решение

У вас нет проблем с atoi в частности, хотя вы не проверяете, работает ли он правильно.

Реальная проблема заключается в том, что ваша программа делится на ноль на первой итерации цикла. Начните x в 2:

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

Вы должны начать с 2, тоже. Начинается с 1 скажет вам, что все ваши числа простые, что не соответствует действительности и, вероятно, не то, что вы хотите. Вам может понадобиться особый случай для обработки 0 а также 1 входы — они не простые, но выпадут из вашего текущего алгоритма.

Редакция в стороне: Есть много более быстрых способов проверить, является ли число простым, если это полезно для вас.

7

Другие решения

Вы не хотите делить на 0, начните с 2:

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