>>631 switch(num){
case 1:
case 2:
case 4:
...
case 1073741824:
case 2147483648:
break;
}
半分ネタだけど、半分マジだからね。
整数の範囲を限定してしまっているけど、それは実装に合わせて。
int random( int m, int n );
n-mの範囲の値を返す関数。
>>631 while (num > 1 && num % 2 != 0) num /= 2;
この結果 num == 1 になれば numは2の累乗。
>>635 while (num > 1 && num %2 == 0) num /= 2;
の書き間違い。失礼しました。
>>631 if((double)num == pow(2,(int)(log((double)num + 0.1) / log(2.0))))
0.1をプラスしているところがミソ
639 :
名無しさん@お腹いっぱい。:2000/11/28(火) 16:24
入力をyとして
x=1から初めて xを2倍しながら xとyが 一致するかどうかチェック。
x>yになったらそうでない
640 :
名無しさん@お腹いっぱい。:2000/11/28(火) 18:03
>>631 浮動小数点に変換して fxtractで仮数部が値1かどうか確認する