Я запрограммировал десятичный в двоичный преобразователь и использовал тип данных unsigned long long int. Кроме того, у меня есть время l oop, чтобы я мог снова преобразовать число после преобразования. Почему я попадаю в бесконечный l oop, если выхожу за пределы диапазона значений unsigned long long int?
Я предполагаю, что l oop не имеет условия, что делать делать, если есть ошибка, и поэтому значение bool остается истинным.
И как я могу отловить такую ошибку?
Вот функция, содержащая l oop
#include <iostream>
#include <windows.h>
void calculateBinary();
int main()
{
bool programmRun = true;
while (programmRun)
{
calculateBinary();
}
}
void calculateBinary()
{
unsigned long long int number;
unsigned long long int binary;
unsigned long long int division;
unsigned long long int memory;
unsigned long long int preDivision;
unsigned long long int runs = 0;
unsigned long long int* binaryArray;
unsigned long long int runsMemory;
bool arraySort = false;
bool calculate = true;
std::cout << "Number to convert: ";
std::cin >> number;
memory = number;
while (calculate)
{
preDivision = memory / 2;
memory = preDivision;
runs++;
if (preDivision == 0)
{
calculate = false;
runsMemory = runs - 1;
binaryArray = new unsigned long long int[runs];
for (unsigned int k = 0; k < runs; k++)
{
binaryArray[k] = k;
}
for (unsigned int i = 0; i < runs; i++)
{
division = number / 2;
binary = number % 2;
number = division;
binaryArray[runsMemory--] = binary;
}
std::cout << "Converted number: ";
for (unsigned int j = 0; j < runs; j++)
{
std::cout << binaryArray[j];
}
delete[] binaryArray;
std::cout << "\n" << std::endl;
}
}
}