- ベストアンサー
”/”を使わずに割り算したいんですが…
割り算(/)を使わずに加算(+)、減算(-)、乗算(*)のいずれかまたはは全てを使って割り算を行い、商と余りを求めるプログラムを作りたいのですが、どのようにしたらよいのでしょうか?
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
まず、単純に考えると、何回引けるかをループでぐるぐる回して引き算しながらカウントすれば、商と引けなくなったところで余りがもとまりますよね。 それだと、被除数が相対的に大きくなると大変なので、乗算によるシフト(例えば10倍して引けるなら10回引いたのと同じということですよね)をしてやればいいかと思います。
その他の回答 (5)
- rinkun
- ベストアンサー率44% (706/1571)
基本的にはNo.3さんのおっしゃるとおり筆算ですね。 私からは2進数でやると効率的だというヒントを出しておきます。 まあ、桁を揃えたりする必要があるので実際には、加算(+)、減算(-)、乗算(*)の他に論理演算は必須だと思いますけど。
お礼
2進数ですか...難しいですね。でもやってみます。 皆さんの回答はどれも素晴しくて甲乙つけがたいのですが、 僭越ながら私にとって分かりやすかった順にポイントをつけさせていただきます。 回答して下さった皆さん、本当にありがとうございました。
自信がないんですが、余りを出す方法は 7/2の場合 7 & (2^シフトする回数-1) = 7 & 1 でこれの結果が余りだと思います。 まぁ、これが正しくても2の倍数での割り算しか無理ですけど・・・。 商はzxczxczxcさんの方法でお願いします
お礼
ありがとうございました。早速やってみます。
- zxczxczxc
- ベストアンサー率28% (2/7)
この質問の目的がわからないので役に立つかわかりませんが、 次のような手段を用います。 私は組み込み系のシステム開発をしておりプロセッサが貧弱なので除算が苦手です。少しでも処理時間を稼ぐために2の除算(余り計算も含む)では、ビットシフトや&演算子、|演算子を使います。 例 7÷2=3 -> 7 >> 1 = 111b >> 1 = 11b = 3 ちょっと意図と違うんだろうな。
お礼
かじってる程度なので、専門的なことは全然分からないんです。 説明不足で申し訳ありません... 回答して下さってありがとうございました。
- poohron
- ベストアンサー率59% (574/971)
例えば… 2385648÷645 という計算を電卓などを使わずに 紙と鉛筆だけでする時、どんなやり方で計算しますか? ____ 645 ノ 2385648 まずこんな風に書きますね。 645は3ケタなので、2385648の上3ケタの238を645と比較。 238の方が小さいので1ケタ増やし、2385÷645を考えます。 といっても頭の中で考えるのは割り算ではなく掛け算でしょう。 「645×4」…2385より大きくなりそうだから、 じゃあ「645×3」…=1935。 2385-1935=450これに2385の次のケタをくっつけて4506。 じゃあ4506÷645=・・・? と、筆算だと使っているのは掛け算と引き算だけですね。 これと同じ考え方でプログラムを組んでみてはいかがでしょう? 実際のプログラムの記述はご自身で考えてくださいね。
お礼
なるほど!!!!!普段からしょっちゅう筆算で割り算しているのに、 掛け算と引き算だけしか使っていないなんて気付きませんでした...; とても分りやすいです。ありがとうございました。
- hirokazu5
- ベストアンサー率16% (308/1836)
A÷Bを求めるとして、 Bを十分に小さい値を初期値として定め、 B+B+B+B+…+Bという値をAと比較、 あるいはBを初期値から一定値ずつ上げていってB+BをAと比較、 不等号が<か>かを見極める判断(BASICならIF文とか)を加えて、とか、 かなり強引というかあほらしいやりかたはどうですか。
お礼
早速のご回答ありがとうございます。 やってみましたが、少し理解りにくいですね... 引き算でやった方がいいのでしょうか...? ありがとうございました。
お礼
すごくシンプルで分りやすいです。ありがとうございました!!!!!!!!!