我正在尝试用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;
}
这(似乎,至少)对于较小的数字可以正常工作,但是当我使用非常高的数字时会崩溃。为什么是这样?我需要使用更大的整数类型吗?或者代码本身有问题吗?
答案 0 :(得分:3)
使用long double
进行因式分解没有多大意义。您需要一个大整数类型来表示整数。 double
通常是64位,但它“浪费”指数中的几个位,因此它可以表示小数,也可以表示幅度非常大但精度降低的数字。
此外,您将除数和除数转换为int
,然后再将它们分开。 int
通常是32位,这意味着超过大约20亿(10位)的任何数字都会溢出,从而产生无意义的结果。它可以缩小到16位,这使它的范围只有-32768到+32767;你通常不应该认为它必然比那更宽。
如果您的编译器支持它(并且它可能支持),请使用类型long long
,它至少为64位。这几乎是19位十进制数字,这足以满足您的要求。