Почему я не могу простыми числами фактора выше определенной величины?

Я пытаюсь написать программу на C ++, которая будет простыми числами факторов, которые имеют 12 цифр. Вот мой код:

#include <iostream>
using namespace std;

int main()
{
long double userInput;
long double divisor = 2;
long double dividend;

cout << "Enter number:   ";
cin >> userInput;
dividend = userInput;

do
{
while (static_cast<int>(dividend) % static_cast<int>(divisor) == 0)
{
cout << divisor << endl;
dividend = dividend / divisor;
}

divisor++;

} while (dividend > 1);

return 0;
}

Это (кажется, по крайней мере) прекрасно работает для меньших чисел, но ломается, когда я использую действительно большие числа. Почему это? Нужно ли использовать больший целочисленный тип? Или что-то не так с самим кодом?

-1

Решение

С помощью long double для факторизации не имеет особого смысла. Вы хотите, чтобы большой целочисленный тип представлял целые числа. double обычно составляет 64 бита, но он «тратит» несколько из этих битов на показатель степени, поэтому он может представлять дробные числа, а также числа с очень большой величиной, но сниженной точностью.

Кроме того, вы конвертируете дивиденд и делитель в int прежде чем разделить их. int очень часто 32 бита, что означает, что любое число свыше 2 миллиардов (10 цифр) будет переполнено, давая бессмысленные результаты. Это Можно быть узким, как 16 бит, что дает диапазон от -32768 до +32767; Вы обычно не должны предполагать, что это обязательно шире, чем это.

Если ваш компилятор поддерживает это (и, вероятно, поддерживает), используйте тип long long, что составляет не менее 64 бит. Это почти 19 десятичных цифр, что более чем достаточно для ваших требований.

3

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

Других решений пока нет …

По вопросам рекламы [email protected]