3

我接受来自用户的输入作为浮点值。

该值可以达到“10 的 18 次方”。

下一步涉及找到这个数字的所有除数。为此,我正在执行以下操作:

      for(i=2; i<=n/2 ; i++)
      {
        if(n%i==0) 
           v.push_back(i);
      }

这里,n 是用户输入的数字。

问题是 n 是浮点数并且在 if 循环索引中使用它会导致它的值被限制为“10 的 9 次幂”

因此,有什么方法可以使用除 int 之外的数据类型来使用范围“10 的 18 次幂”的值吗?

4

4 回答 4

3

您可以使用unsigned long long2 64或大约 10 19

这假定您的编译器支持 64 位整数。

于 2012-04-27T07:11:49.500 回答
2

问题已得到解答(使用 long long int),但想指出浮点数被称为“浮点数”是有原因的。它们包含一个指数,基本上是小数点的位置,它决定了尾数的精度。这方便地允许您同时表示高精度的小数和低精度的大数,但不能同时表示两者

更多详情:http ://en.wikipedia.org/wiki/IEEE_754-2008

试试这个:

int main(void)
{
    float i = 16777217.0f;
    printf("i = %f\n", i);
    i++;
    printf("i+1 = %f\n", i);
}

w/ 32 位浮点数返回:

i = 16777216.000000
i+1 = 16777216.000000

所以今天的问题:如果你有这样的循环,你认为会发生什么?

for(float f; f < 20000000; ++f) 
{
    // do stuff
}
于 2012-04-28T04:24:01.820 回答
0

我认为长双倍应该是可观的。

于 2012-04-27T07:14:08.437 回答
0

当然你可以使用其他数据类型进行循环,使用 这里提到的任何类型

于 2012-04-27T07:23:20.423 回答