0
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;
    }
}
4

2 回答 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 回答