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;
}
}
答案 0 :(得分: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正在终止,无论这意味着什么。它将终止程序,所以它并非完全错误......)
答案 1 :(得分:1)
不,完全没有。
首先,您的小数是一个int。其次,你应该成倍增加而不是分裂。第三,使用小数时,舍入错误始终发生,因此在将小数与某些内容进行比较时需要考虑到这一点。
最重要的是,计算机上存储的所有小数都在“终止”,因为在计算机中,小数小数不会超过有理数M / N,N为幂2。
你应该阅读floating point numbers。