SyuchiNikuRingの備忘録

お勉強したことをまとめておく場所。中の人の理解や感覚で書いているから不正確なことも多いかも。

各位の数字をゲット!の続き

前回はwhileを使ったループで各位の数字を獲得しよう!みたいなことを書きました。

 

まぁ別にそれでもいいんですけど,もう一つのやり方を。本質的には同じ話です。

 

N = 12345とします。突然各位の数字が欲しくなりましたが,あいにくwhileアレルギーだとしましょう。さあどうやって各位の数字を手に入れましょうか。

 

まず,10で割って余りを得ます。

12345%10 = 5

一の位の数字獲得。

 

10で割ってから10で割った余りをとりましょう。

12345/10%10 = 1234%10 = 4

10の位クリアです。

 

100で割って10で割った余りを得ます。

12345/100%10 = 123%10 = 3

百の位もクリアです。

 

同じように1000で割って10で割った余りを取ってみましょう。

12345/1000%10 = 12 % 10 = 2

千の位ゲットです。

 

最後に10000で割ります。(割ってから10で割った余りを取る,と同じです)

12345/10000 = 1

(12345/10000%10 = 1%10 = 1)

一万の位の数字も獲得できました。ノルマ達成です。

 

結局,10^kの位の数字が知りたければ,10^kで割った後に10で割った余りを取れば良いのです。

これだと,1ループごとにNを10で割って更新することなく,素のNのまま全て計算できます。

 

与えられる数字の桁数が事前に分かっているときなんかはこっちの方がループ使わずにできるので手っ取り早いかもしれませんね。

 

桁数が分からないときに使うのであれば,

・string型でNを取得

・.size()で長さ(桁数)を取得

・i < N.size()でループ

の流れでできそうですね。

 

まあ桁数わからないなら整数型で一貫するwhile使う方が楽そうですけどね。