int is_ter(int x)
{
//it is not a TWOs nor a FIVEs and not 1.0
g:
if(x%2 !=0 && x%5 !=0 && x!=1 )
return 0;
// make sure it is 1.0
if(x%2 !=0 && x%5 !=0 && x==1 )
return 1;
//check if it is a two
if(x%2==0){
x/=2;
goto g;
}
if(x%5==0)
{
x/=5;
goto g;
}
}
问问题
955 次
2 回答
5
从外观上看,您想检查 1/x 是否正在终止。
您的代码看起来有些混乱。您需要检查所有素因子是 2 还是 5:
int is_ter(unsigned int x)
{
while (x>1)
{
if (x%2==0) x=x/2;
else if (x%5==0) x=x/5;
else return 0;
}
return 1;
}
应该做的伎俩(好吧,它说 1/0 正在终止,不管这意味着什么。它将终止程序,所以它并不完全错误......)
于 2012-07-22T12:19:37.707 回答
1
一点都不。
首先,你的小数是一个整数。其次,您可能应该乘法而不是除法。第三,在使用小数时,总是会出现舍入错误,因此在将小数与某物进行比较时需要考虑到这一点。
最重要的是,存储在计算机上的所有小数都是“终止”的,因为在计算机中,小数并不比有理数 M/N 多多少,而 N 是 2 的幂。
您应该阅读一些关于浮点数的内容。
于 2012-07-22T12:12:31.577 回答