幼稚園時代「何組」でしたか?

初心者です、お願いします
任意の2進数を入力してそれを10進数に変換して画面上に出力したいのですが、どなたかヒントをください
自分なりに考えた結果は、[17]以上の配列を用意してそこに格納する、その格納された桁数をstrlenで割り出してからひとつずつ2の重みで計算をしてそれを足していく・・・こんな考え方でいいのでしょうか?ここまで出間違っていることや、それともほかにもっと簡単な方法がありましたら教えてください
お願いします。

A 回答 (3件)

17以上の文字変数 char buf[17] ということですよね?


良いのではないでしょうか。
ただ、個人的には入力する人が何桁入力するのかわからないので、危険防止のためにbuf[100]位確保しておくと、変な入力による実行時エラーを最小限にくい止められます。

配列に入っているのは、"文字"の 0 or 1 なので文字コードは 0x30 or 0x31 ゛ですね。
これから数字に直す方法は、switch文を使って処理自体を分けることも出来ますし、
そのまま計算で求める(つまり 0x30 引くと 0, 1という数字が得られる)方法もあります。

気をつけるのは 2 とか a とか全然違う文字を入力されたときの対処方法ですね。
もう一つ2進数を入力するときに、 <space> 1101 とか 1101 <space> と空白が入力されている場合に、エラーとするのか、スペースをあらかじめ除去しておくのか、仕様を決めましょう。

速度を気にしなければ私ならループを回して switch(buff[i]) でつくるかな?
(0,1以外の文字、スペースの処理などのために)

こつは上位の桁から計算するとエレガントですね。
(なぜなのかは考えてみてください。)
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
>気をつけるのは 2 とか a とか全然違う文字を入力されたときの対処方法ですね。
これについては考えていたのですが。
>もう一つ2進数を入力するときに、 <space> 1101 とか 1101 <space> と空白が入力されている場合に、エラーとするのか、スペースをあらかじめ除去しておくのか、仕様を決めましょう。
これについては考えてもいませんでした、説明も大変わかりやすくとても助かりました。ありがとうございました。

お礼日時:2002/10/30 23:48

> 自分なりに考えた結果は、[17]以上の配列を用意してそこに格納する、


> その格納された桁数をstrlenで割り出してからひとつずつ2の重みで計算をしてそれを足していく・・・
> こんな考え方でいいのでしょうか?

ここまで考えてるんだったら、書けばいいのに。
間違っているか否かは、コンパイラと実行結果が教えてくれます。ヒトに教えてもらう前にこのくらいやりましょうよ。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
確かにそのとおりですねぇ・・・
いろいろと書いては見たのですが、本当にこのやり方でいいのかを検証したかったんです。
ありがとうございました。

お礼日時:2002/10/30 23:53

何かの問題ですか。


そうでなければ、Cの標準関数を使うのがいちばん簡単だと思います。
strtol関数は、2~36進数までの文字列をlong値に変換してくれます。
これを使うのがいちばん簡単ではないですか。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
当方初心者なもので、そのような関数があるとは知りませんでした。
早速調べてみます。
ありがとうございました。

お礼日時:2002/10/30 23:50

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