C言語関係掲示板

過去ログ

No894 1/n の計算

[戻る] [ホームページ]
No.538

二進数の除法
投稿者---みかん(2003/10/19 00:23:01)


n <=100000 のとき、正の整数nを一つ標準入力から読み込んで、1/nを計算して、結果を出力して終了するプログラムを作りたいのですが、どうしていいか分かりません。
出力方法も、もし答えが循環小数の場合、循環する部分を括弧()で囲まなければなりません。
二進数で計算するのかな・・・?と考えてはいるのですが、本当にわからないので教えてください。

No.539

Re:二進数の除法
投稿者---かずま(2003/10/19 17:51:07)


> n <=100000 のとき、正の整数nを一つ標準入力から読み込んで、1/nを計算して、
> 結果を出力して終了するプログラムを作りたいのですが、どうしていいか分かりません。
> 出力方法も、もし答えが循環小数の場合、循環する部分を括弧()で囲まなければなりません。

まず、問題の意味を正しく理解しているか確認してみましょう。
そのために、具体例を考えてみます。

n = 5 のとき、1/n = 0.2
n = 6 のとき、1/n = 0.1666... = 0.1(6)
n = 7 のとき、1/n = 0.142857142857... = 0.(142857)

こういうことですね。ここまではわかっていますか?

小数の割り算は小学校で学んでいますから、次のようなアルゴリズムが思いつくはずです。

[1] a = 1 とする。
[2] a を 10倍し、n で割る。
[3] 商を表示する。
[4] 余りを新たな a とする。
[5] a が 0 なら有限小数なので終了。
[6] a がすでに出た値なら、そこからこのひとつ前までを循環する小数なので終了。
[7] [2] に戻る。

整数部分の表示は省略して、小数部分だけを表示しています。
循環する部分を括弧で囲むなら、[3] で表示せず、その値を憶えておいて後で表示しなけ
ればならないでしょう。

C のプログラムを書くなら、商の配列と、余りの配列を用意することになります。

まだ、わからないことがありますか?

No.547

Re:二進数の除法
投稿者---かずま(2003/10/20 16:46:07)


> [6] a がすでに出た値なら、そこからこのひとつ前までを循環する小数なので終了。

訂正します。

[6] a がすでに出た値なら、その出たところの次からここまでを循環する
小数なので終了。

No.567

Re:二進数の除法
投稿者---みか(2003/10/23 03:18:45)


いろいろとありがとうございました。
かずまさんのおかげで、何とか自分でプログラムを作ることができました。