使用int以外的数据类型作为C ++ for循环中的索引值

时间:2012-04-27 07:10:00

标签: c++ c loops type-conversion

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

此值可以达到“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 个答案:

答案 0 :(得分:3)

您可以使用unsigned long long,其中2 64 或大约10 19

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

答案 1 :(得分: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
}

答案 2 :(得分:0)

我认为长篇大论应该是实质性的。

答案 3 :(得分:0)

当然,您可以使用其他数据类型进行循环,使用here

中提到的任何类型