-1

我正在尝试用 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;
}

这(至少似乎)适用于较小的数字,但当我使用非常高的数字时它会崩溃。为什么是这样?我需要使用更大的整数类型吗?还是代码本身有问题?

4

1 回答 1

3

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

int此外,您在除以之前将被除数和除数转换为。int通常是 32 位,这意味着任何超过 20 亿(10 位)的数字都会溢出,从而产生毫无意义的结果。它可以窄至 16 位,这使其范围仅为 -32768 到 +32767;你通常不应该假设它一定比这更宽。

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

于 2015-11-30T23:41:46.773 回答