dポイントプレゼントキャンペーン実施中!

加算、減算、シフト、論理演算、ループ、等を使って
除算を使わずに10で割る方法は無いものでしょうか?
また、近似値を求めてから誤差を修正する方法でも構いません。

ただし、ループで10を引き続けてカウントする方法は除外させてください。

言語はCでお願いします。

A 回答 (16件中11~16件)

ANo5です。



訂正です。

10のビットを反転し1を足して掛けます。
    • good
    • 0

取合えず回答1



10のビットを反転して、掛けます。
    • good
    • 1

> ただし、ループで10を引き続けてカウントする方法は除外させてください。



ループで10を足し続けて、被除数を越える直前の値が商。
    • good
    • 0
この回答へのお礼

ウィットの利いた回答ありがとうございます。

お礼日時:2008/09/08 19:19

学生さんの宿題ですかねぇ。

除算がダメなら0.1を乗算すればいいのでは、とか詭弁を使ってみたりして。

冗談はさておき、除算にはいくつかのアルゴリズムがありますが、復元法なら簡単だと思います。2で割る部分はシフトで求めます。
詳しいアルゴリズムはこんなところで。

参考URL:http://www.elc.ees.saitama-u.ac.jp/ITO/Ex4/divid …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

恥ずかしながら理解するのに時間が掛かりました。
実のところ、ループも使わずに出来ないかと思うのですが
お手数ですが他の方法をご存知であればご教示ください。

今回の回答に不満があるというわけではありません。
実際プログラムを組んでみて、例えば数kBの数値を除算するのにどれほどの時間が掛かるか試して見る必要があります。
マルチバイトの比較やシフトなんかも組まないといけないので
今実際に試すことができません。

回答には大変感謝しております。
ありがとうございました。

また、他の回答も随時受け付けております。

お礼日時:2008/09/08 19:17

課題じゃないんですか?


だと、そのまま質問するのはルール違反なんですけど。

こういうのはヒントになるでしょうか。(全然役に立たないかも知れませんが。)

論理演算可能な数値らしいので、浮動小数点とかではないですよね。

・乗算せずに10倍する方法。
 ・3bitシフトして8倍の値と、1bitシフトして2倍の値を得る。
 ・それらを加算すると10倍の値を得られる。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

申し訳ありませんが、乗算に関しては自分でいろいろやって、お書きになった方法に関してもよく理解しているつもりです。
しかしながら、除算になると事が違ってきます。
単純に、2で割ったものと8で割ったものを引いても足しても意味がありません。
2進数では1/10が循環小数になってしまうのです。

いくつか近似値を求める方法は試したのですが、うまく誤差の修正がいきません。
200弱くらいまでしか正しい結果を得られませんでした。
これをマルチバイトに適応するとなるともっと効率のいい方法が必要になると感じています。

情報が少なくて申し訳ありませんでした。
ありがとうございました。

お礼日時:2008/09/08 18:33

素直に除算を使用して10で割るのが、自然だとおもうのですが、


どうして、除算を使用してはいけないのでしょうか。(コンパイラが除算をサポートしていないのでしょうか)
その辺の事情を書かれると、良い回答が得られるかもしれません。

この回答への補足

そうですね、いろいろ用途があります。

例えば、32ビットを超える多倍長のバイナリを10進数表記にしたり
それを使って、2進化10進数への変換を行ったり
方法によっては多倍長演算にも使えそうですかね。

多倍長演算に関しては、数値を文字列に変換して行うのが基本だと思うのですが
バイナリで行いたいと常々感じていました。
言語によっては初めからサポートされてるものもあるようですが
実際に使った事は無いので結果がバイナリで出力されるのかどうかわかりません。
もちろんC言語ではサポートされていないので実装したいとも思っています。

多倍長のバイナリ16進数から10進数に変換する方法だけでもいいです。
たぶん、そのほうが手っ取り早いです。

うまく説明できているかどうかわかりませんが、問題解決に協力していただきたいです。
友人に説明したところ、何言ってるかわからないと言われました。すみません。

補足日時:2008/09/08 18:02
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています