- ベストアンサー
繰り返し
に関する質問です。 正の整数mを読み込んだときにそれを逆順にした数nを求め、mとnどちらが大きいかもあわせて出力しなさいという問題です。ただし配列は使ってはいけないと言われました。 全くわかりません。教えてほしいです、よろしくおねがいしますm(__)m
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
//この関数は整数を逆にするよ int reversint(int x) { int ret=0; while(x!=0) { ret=ret*10+x%10; x/=10; } return ret; }
その他の回答 (4)
- gatch_ky
- ベストアンサー率43% (18/41)
ret=ret*10+x%10;とはxを10で割った余りにret*10をたすというのはどういうことなんでしょうか? --> ret*10は桁を左にずらしてるんだよ。 x%10は1の位に足してるんだよ。
お礼
お礼の返信遅くなりましたm(__)m よく考えた結果、やっとわかりました!本当にありがとうございます。 当初、自分が考えたアルゴリズムでは、まず桁数を出して、4桁なら1000、100、10、1に分けて、逆順にした数にかけて変数に入れるというにしていました。そうではなく、10かけて左に桁をずらしそれに足していくということなんですね。すっきりしました、ありがとうございます!
- jacta
- ベストアンサー率26% (845/3158)
> どうやったら逆順にした数を変数に格納することができるのかがわからないんです・・・ 普通に=を使って代入するだけです。
- nerosuke
- ベストアンサー率33% (39/115)
配列は使う必要は無いので、制限の内に入らないでしょう。 数値の出力として、printfは使えます。(%d) とりあえず入力された値をそのまま出力して見てください。 それができたら、あとは桁の入れ替えだけです。 桁の入れ替えは位で割ったり余りを求めれば簡単にでますよ。
お礼
回答ありがとうございますm(__)m
- jacta
- ベストアンサー率26% (845/3158)
ヒントだけ。 配列を使ってはいけないということは、文字列も使えないので、scanfやprintf(もちろん、fgetsなども)使えないことになります。 getcharで入力して、putcharで出力するようにしましょう。 逆順にするのは計算で求められますね。
お礼
回答ありがとうございますm(__)m逆順にするのは出来るのですが、どうやったら逆順にした数を変数に格納することができるのかがわからないんです・・・
お礼
回答ありがとうございますm(__)m ret=ret*10+x%10;とはxを10で割った余りにret*10をたすというのはどういうことなんでしょうか?