Необработанное исключение по адресу C++
На 66-ой строчке выдаёт ошибку "необработанное исключение по адресу". Как фиксить?
В этой части -
if ((n - 1) / j == 2) { isPalindrome = true; }
#include <iostream>
#include <cmath>
using namespace std;
int main() {
setlocale(LC_ALL, "ru");
int a, b, n = 1, pow1, pow2, x, j = 0, reversed_a = 0, iteration = 0;
bool isPalindrome = false;
cout << "Программа получает на вход число. Если оно не является палиндромом, программа скаладывает его с перевернутой версией" << endl;
cout << "числа до тех пор, пока число не станет палиндромом.\n" << endl;
cout << "Введите число: ";
cin >> a; //Ввод числа
while (isPalindrome == false) {
b = a; //Копия числа a
while (b >= 10) { //Подсчёт длины числа
b = b / 10;
n++;
}
int* arr;
arr = new int[n];
for (int i = 0; i < n; i++) { //Создание массива, содержащего перевернутое число a по цифрам
pow1 = (int)pow(10, i + 1);
pow2 = (int)pow(10, i);
x = (int)((a % pow1) / pow2);
arr[i] = x;
}
int* new_arr;
new_arr = new int[n];
for (int i = 0; i < n; i++) { //Переворот массива и получение числа a, записанное в массив по цифрам
new_arr[i] = arr[n - (i + 1)];
}
/*/for (int i = 0; i < n; i++) { //Вывод массива на экран (для проверки правильности работы)
cout << new_arr[i] << endl;
}*/
//Проверка числа a на палиндромность
if (n % 2 == 0) { //Если число состоит из чётного кол-ва цифр, проверяется, равняется ли первое число массива последнему, второе - предпоследнему и т.д.
for (int i = 0; i < (n / 2); i++) {
if (new_arr[i] == new_arr[n - (i + 1)]) {
j++; //После каждого совпадения первого и последнего и т.д. чисел увеличивается переменная j
}
}
if (n / j == 2) { //Если число - палиндром, то количество совпадений будет равно половине от кол-ва всех цифр
isPalindrome = true;
}
}
else {
for (int i = 0; i < ((n - 1) / 2); i++) { //Если число нечётное, то делается всё тоже самое, только без учёта числа по середине
if (new_arr[i] == new_arr[n - (i + 1)]) {
j++;
}
}
if ((n - 1) / j == 2) { //Если число - палиндром, то количество совпадений будет равно половине от кол-ва всех цифр - 1
isPalindrome = true;
}
}
if (isPalindrome == false) { //Преобразует массив из перевернутого числа а в перевернутое число а в типе int
for (int i = 0; i < n; i++) {
reversed_a += (int)(arr[i] * pow(10, n - (i + 1)));
}
cout << a << " + " << reversed_a << " = " << a + reversed_a << endl;
a += reversed_a;
}
iteration++;
}
cout << "Число a стало палиндромом спустя " << iteration << " итераций и сейчас равно " << a << endl;
system("pause");
}
Ответы (1 шт):
Автор решения: David
→ Ссылка
В строке if ((n - 1) / j == 2) вы делите число n - 1 на результат сравнения j==2. Если j==2 будет false (т.е. число в переменной j не равно двум), то вы делите на ноль, что вызывает необработанное исключение.