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

いいえ、まったくありません。

まず、小数はintです。第二に、おそらく除算ではなく乗算を行う必要があります。第 3 に、小数を扱う場合、丸め誤差が常に発生するため、小数を何かと比較する際にはそのことを考慮する必要があります。

そして最も重要なことは、コンピューターに保存されているすべての小数は「終了」していることです。これは、コンピューターでは、小数が有理数 M/N (N は 2 の累乗) を大きく超えないためです。

浮動小数点数について読む必要があります。

于 2012-07-22T12:12:31.577 に答える