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;
}
}
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 に答える