- 締切済み
反転のプログラムについて
プログラムの質問で「入力された正の整数において、桁の順序を反転したプログラムを作れ。321→123、32100→123など。0の時は0と表示させろ」という問題がどうしてもわかりません。講師の人が10で割ればいいと言ってるんですがいまいちわかっていません。使ってるのはVisual Stadio 2005のC++です。教えてもらえませんか?ついでに 「M以上N以下の正の整数で、素数であるものを小さい方から表示するプログラムを作れ」も教えてもらえれば幸いです。アドバイスでも結構ですのでよろしくお願いします
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- SE-Davis
- ベストアンサー率11% (2/18)
10で割れってのは、まず10で割った余りを求めていくことで、最初の数字を各桁ごとの数字に分けるということではないでしょうか。 例えば、32100を10で割ると余りは、0 (1)で、商は3210 次に3210を10でで割ると余りは、0 (2)で、商は321 321を10で割ると余りは、1 (3)で、商は32 32を10で割ると余りは、2 (4)で、商は3 3を10で割ると余りは、3 (5)で、商は0 こうして、商が0になるまで、または、商が10未満になるまで続けて、配列にでも入れます。 ここで、配列をint n[]としていると n[0] = 0, n[1] = 0, n[2] = 1, n[3] = 2, n[4] = 3 とういようになります。 あとは、これに対して、 n[4]には10の0乗をかける。 n[3]には10の1乗をかける。 n[2]には10の2乗をかける。 n[1]には10の3乗をかける。 n[3]には10の4乗をかける。 この結果を足し算する。 以上で、求まります。 あとは、これをループを利用してできるようにすればOKです。 もう一つも、簡単な方法は、MからNまでの正数を順番に、素数かどうか調べて、素数の場合表示するということをするだけです。 数字nが素数かどうかを調べるには、数字n未満の1以外の正数でnを割り、余りが0になることがなければ、その数は素数です。 まず、この数値nを引数として渡した場合に、素数かどうかを判定する関数を作成します。 そして、MからNまでfor文かなにかでループさせ、その値を引数をして先の関数に渡し、素数と判定された場合のみ、出力(表示)するようにしておきます。 だいたい、以上のような感じでできると思います。
- mackid
- ベストアンサー率33% (2688/8094)
>講師の人が10で割ればいいと言ってるんですがいまいちわかっていません。 どんな言語か知りませんが、要するに末尾のゼロをなくしてからひっくり返せと言っているのでしょう。つまり32100は321にしてからひっくり返せ、と。 で、10で割って割り切れればそれはゼロで終わっているということですから、その場合はまた10で割る。これを繰り返して割り切れない、つまり末尾がゼロでなくなったら、その時点でひっくり返すというアルゴリズムなのでしょう。 もちろん他にも方法はいくつもありますが。 素数はパス。