У меня есть следующая функция в 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
использоваться? Я использую это неправильно? Или это совсем другая проблема?
Спасибо
У вас нет проблем с atoi
в частности, хотя вы не проверяете, работает ли он правильно.
Реальная проблема заключается в том, что ваша программа делится на ноль на первой итерации цикла. Начните x
в 2
:
for (int x = 2; x < maxX; x++)
Вы должны начать с 2
, тоже. Начинается с 1
скажет вам, что все ваши числа простые, что не соответствует действительности и, вероятно, не то, что вы хотите. Вам может понадобиться особый случай для обработки 0
а также 1
входы — они не простые, но выпадут из вашего текущего алгоритма.
Редакция в стороне: Есть много более быстрых способов проверить, является ли число простым, если это полезно для вас.
Вы не хотите делить на 0, начните с 2:
for (int x = 2; x < maxX; x++)