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

C++ 在C+中使用int以外的数据类型作为索引值+;for循环,c++,c,loops,type-conversion,C++,C,Loops,Type Conversion,我接受用户的输入作为浮点值 该值可高达“10升到18次方” 下一步是找到这个数的所有除数。为此,我正在做以下工作: for(i=2; i<=n/2 ; i++) { if(n%i==0) v.push_back(i); } 对于(i=2;i您可以使用无符号long-long,它是264或大约1019 这假设您的编译器支持64位整数。我认为长双精度应该是实质性的。如果您可以为循环使用其他数据类型,请使用上面提到的任

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

该值可高达“10升到18次方”

下一步是找到这个数的所有除数。为此,我正在做以下工作:

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

对于(i=2;i您可以使用
无符号long-long
,它是264或大约1019


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

我认为长双精度应该是实质性的。

如果您可以为循环使用其他数据类型,请使用上面提到的任何类型。

问题已经得到了回答(使用长整型),但希望指出浮点被称为“浮点”出于某种原因。它们包含一个指数,基本上是小数点的位置,它决定尾数的精度。这方便地让您既可以用高精度表示小数字,也可以用低精度表示大数字,,但不能同时用两者来表示

有关详细信息:

试试这个:

int main(void)
{
    float i = 16777217.0f;
    printf("i = %f\n", i);
    i++;
    printf("i+1 = %f\n", i);
}
带32位浮点数,返回:

i = 16777216.000000
i+1 = 16777216.000000
所以今天的问题是:如果你有这样一个循环,你认为会发生什么

for(float f; f < 20000000; ++f) 
{
    // do stuff
}
for(浮点f;f<20000000;++f)
{
//做事
}

您的编译器是否支持64位整数,可能使用
long
?根据定义,浮点实际上没有除数。但是,如果您想要像mod这样的整数,可以使用
fmod
@hroptatyr:呃,是的,浮点可以有除数,因为它们可以表示整数。(否则您无法在JavaScript中计算数字,因为所有数字在JavaScript中都是浮点数。)@AmanKejriwal:
printf(“%d\n”,sizeof(long-long));
将确认它。如果出现错误,则编译器无法理解
long long
。如果结果为8,则编译器的
long long
整数为64位。顺便问一下,如果您希望这里有大的n,那么要等待循环完成需要多长时间?如果n>10^15,则可能需要几天时间。我添加了给你的“to the power”标签:)@PavanManjunath:谢谢,伙计!嗨,在n上使用无符号long-long,输入值很好。但是,当我这样做I=n/2时,I的值被限制在int范围内。我还声明I为无符号long-long-long,但这没有帮助,所以我认为你需要指定2为一个ULL。即
I=n/2ULL