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;
}
}
从外观上看,您需要检查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正在终止,不管这意味着什么。它将终止程序,所以这并不完全是错误的…)
不,一点也不。
首先,你的小数是一个整数。其次,你可能应该是乘法而不是除法。第三,当使用小数时,舍入错误总是会发生,所以在将小数与某个数字进行比较时,需要考虑到这一点。
最重要的是,存储在计算机上的所有小数都是"终止"的,因为在计算机中,小数分数只不过是一个有理数M/N,N是2的幂。
你应该读一些关于浮点数的书。