あなたの宿題、お姉さんが答えます

このエントリーをはてなブックマークに追加
632名無しさん@お腹いっぱい。
>>631
switch(num){
 case 1:
 case 2:
 case 4:
 ...
 case 1073741824:
 case 2147483648:
  break;
}
633632:2000/11/28(火) 14:34
半分ネタだけど、半分マジだからね。
整数の範囲を限定してしまっているけど、それは実装に合わせて。
634名無しさん@お腹いっぱい。:2000/11/28(火) 14:40
int random( int m, int n );

n-mの範囲の値を返す関数。
635名無しさん@お腹いっぱい。:2000/11/28(火) 15:00
>>631
while (num > 1 && num % 2 != 0) num /= 2;
この結果 num == 1 になれば numは2の累乗。
636635:2000/11/28(火) 15:01
>>635
while (num > 1 && num %2 == 0) num /= 2;
の書き間違い。失礼しました。
637名無しさん@お腹いっぱい。:2000/11/28(火) 15:08
>>631
if((double)num == pow(2,(int)(log((double)num + 0.1) / log(2.0))))
0.1をプラスしているところがミソ
638名無しさん@お腹いっぱい。:2000/11/28(火) 15:31
>>631
ビットを合計して1の場合2の累乗
639名無しさん@お腹いっぱい。:2000/11/28(火) 16:24
入力をyとして
x=1から初めて xを2倍しながら xとyが 一致するかどうかチェック。
x>yになったらそうでない
640名無しさん@お腹いっぱい。:2000/11/28(火) 18:03
>>631
浮動小数点に変換して fxtractで仮数部が値1かどうか確認する