プロが教える店舗&オフィスのセキュリティ対策術

入力された10進数の数値を2進数に変換する、プログラムを教えてください。
仕様がありまして、2進数を求めるには、入力された10進数の数値を、for文とif文を使用し商が0になるまで2で割り、2進数の値を求め、表示させなければいけません。
ご教授お願いいたします。

A 回答 (5件)

>仕様がありまして、2進数を求めるには、入力された10進数の数値を、


>for文とif文を使用し商が0になるまで2で割り、2進数の値を求め、表示させなければいけません。

それは仕様ではなく、実装方法ですね。
まずはその日本語のままにコーディングして下さい。
    • good
    • 0

サンプルで考えて見ましょう。


ここに、14という数字があります。
2進法では 1110(2)ですね。
      8+4+2+0=14
  basicだと、¥で商、modがあまりです。

14を2で割る(¥)と、7 >0 あまり(mod) 1
7 を2で割ると    3 >0 あまり    1
3 を2で割ると    1 >0 あまり    1
1 を2で割ると    0 if文で終了 あまり 0

なので、あまりをすべて反対にすれば、1110が求まります。
ちなみに、出たあまりを次のルーチンで10倍すれば、簡単に
1110を作れると思います。
これを、プログラミングしてみてください。

プログラムを考える上で、簡単なサンプルを手でまわしてみると難しそうなものも解けることがあります。
    • good
    • 0

>14を2で割る(¥)と、7 >0 あまり(mod) 1


>7 を2で割ると    3 >0 あまり    1
>3 を2で割ると    1 >0 あまり    1
>1 を2で割ると    0 if文で終了 あまり 0

これはまずいです。

14を2で割ると、7 あまり 0
7 を2で割ると 3 あまり 1
3 を2で割ると 1 あまり 1
1 を2で割ると 0 あまり 1
商が0になったので終了
あまりを下から読むと1110、というのが正しいです。
    • good
    • 0

参考にwhileでのプログラムを(ほぼ回答ですが)



main(){
int n=1;   ・・・桁数
int res;   ・・・結果
int num;   ・・・10進数

scanf("%d",num); ・・・10進数を格納
while(num>0){   ・・・10進数が0になったら終了

res += num % 2 * n;
num = num / 2;    ・・・省略
n *= 10;

}
printf("%d\n",res);   ・・・結果の表示
}

省略した部分は他の方が説明しているので分かると思います。
分からなかったら1回ごとの処理を手書きで計算してみるといいです。
+=とか*=とかはわかりますか?例)n += 10 → n = n + 10
ということです。ちなみに+と=の間にスペース入れるとエラー吐きますんで。
    • good
    • 1

(なんか「回答」がおかしく(?)なってきましたね・・)



☆No2 さんの「回答」については、No3 さんが正されています。
 それにつけても、
>あまりをすべて反対にすれば、
 って何??

☆No4 さんの「回答」は、
>ほぼ回答ですが・・
 って、どこに「for文、if文を使って」あるんですか?
 int res;     → int res = 0; 初期化忘れ
 scanf("%d",num); → scanf( "%d", &num ); &忘れ
 num = num / 2; → num /= 2; 説明の流れから
 てか、1023 を超える数で試されましたか?

☆よそ様のことを、とやかく言うのは、すごくドキドキします。
 でも、あまりにも・・・。
------------------------------
★暇な年寄りがアドバイス(【参考】になれば・・)。
 (ご質問主旨とは、ちょっと離れます)
#include <stdio.h>
#include <stdlib.h>

void toBinString( int iVal )
{
 int i, nn = 31+3;
 char cBinStr[64] = ""; // 文字列初期化

 printf( "%11d", iVal ); // 10進数表記

 for( i = 0; i < 32; i++ ){

  if( i && ( 0 == ( i % 8 ) ) ){

   cBinStr[nn--] = 0x20; // スペース
  }
  cBinStr[nn--] = 0x30 + abs( iVal % 2 ); // 数→文字、格納

  iVal /= 2;
 }
 printf( " %s\n", cBinStr ); // 2進数表記
}
void main()
{
 int k, iVal = 2147483645;

 for( k = 0; k < 5; k++ ){

  iVal++;

  toBinString( iVal );
 }
}
注:インデントに全角空白を用いています(タブに置換して実行してみて下さい)。
(LSI C-86不可←int型16ビット)
------------------------------------------
No1,3 さんの回答をもとに解決しましたら、
◆お二人の「経験者」のためにも、質問者権限でこの「質問」を削除することをお薦めします。 
 
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!