这个算法适用于检查终止小数点吗


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的幂。

你应该读一些关于浮点数的书。

最新更新