为什么我不能将因子数量超过一定幅度?

时间:2015-11-30 23:36:42

标签: c++ int prime-factoring long-double large-data

我正在尝试用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 个答案:

答案 0 :(得分:3)

使用long double进行因式分解没有多大意义。您需要一个大整数类型来表示整数。 double通常是64位,但它“浪费”指数中的几个位,因此它可以表示小数,也可以表示幅度非常大但精度降低的数字。

此外,您将除数和除数转换为int,然后再将它们分开。 int通常是32位,这意味着超过大约20亿(10位)的任何数字都会溢出,从而产生无意义的结果。它可以缩小到16位,这使它的范围只有-32768到+32767;你通常不应该认为它必然比那更宽。

如果您的编译器支持它(并且它可能支持),请使用类型long long,它至少为64位。这几乎是19位十进制数字,这足以满足您的要求。