我接受来自用户的输入作为浮点值。
此值可以达到“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'的值?
答案 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
中提到的任何类型