• ベストアンサー

繰り返し

に関する質問です。 正の整数mを読み込んだときにそれを逆順にした数nを求め、mとnどちらが大きいかもあわせて出力しなさいという問題です。ただし配列は使ってはいけないと言われました。 全くわかりません。教えてほしいです、よろしくおねがいしますm(__)m

質問者が選んだベストアンサー

  • ベストアンサー
  • gatch_ky
  • ベストアンサー率43% (18/41)
回答No.1

//この関数は整数を逆にするよ int reversint(int x) { int ret=0; while(x!=0) { ret=ret*10+x%10; x/=10; } return ret; }

house-i
質問者

お礼

回答ありがとうございますm(__)m ret=ret*10+x%10;とはxを10で割った余りにret*10をたすというのはどういうことなんでしょうか?

その他の回答 (4)

  • gatch_ky
  • ベストアンサー率43% (18/41)
回答No.5

ret=ret*10+x%10;とはxを10で割った余りにret*10をたすというのはどういうことなんでしょうか? --> ret*10は桁を左にずらしてるんだよ。 x%10は1の位に足してるんだよ。

house-i
質問者

お礼

お礼の返信遅くなりましたm(__)m よく考えた結果、やっとわかりました!本当にありがとうございます。 当初、自分が考えたアルゴリズムでは、まず桁数を出して、4桁なら1000、100、10、1に分けて、逆順にした数にかけて変数に入れるというにしていました。そうではなく、10かけて左に桁をずらしそれに足していくということなんですね。すっきりしました、ありがとうございます!

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

> どうやったら逆順にした数を変数に格納することができるのかがわからないんです・・・ 普通に=を使って代入するだけです。

  • nerosuke
  • ベストアンサー率33% (39/115)
回答No.3

配列は使う必要は無いので、制限の内に入らないでしょう。 数値の出力として、printfは使えます。(%d) とりあえず入力された値をそのまま出力して見てください。 それができたら、あとは桁の入れ替えだけです。 桁の入れ替えは位で割ったり余りを求めれば簡単にでますよ。

house-i
質問者

お礼

回答ありがとうございますm(__)m

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

ヒントだけ。 配列を使ってはいけないということは、文字列も使えないので、scanfやprintf(もちろん、fgetsなども)使えないことになります。 getcharで入力して、putcharで出力するようにしましょう。 逆順にするのは計算で求められますね。

house-i
質問者

お礼

回答ありがとうございますm(__)m逆順にするのは出来るのですが、どうやったら逆順にした数を変数に格納することができるのかがわからないんです・・・