こんばんは
アロハな男、やすのりです!!
今週勉強している中で理解するのに少し時間が必要だったことについて備忘録も兼ねて書き記しておこうと思います
今回のテーマは題名の通り**『2桁以上の数字から、欲しい桁の数値を取る時はどうしたらいいの!?』**を解決しちゃいましょう!!
ちなみに、計算は全て整数になっているので今回は省きますが、小数点が入っていたりしたらto_iメソッドを使ったりと少し変化も有ります。
#どうやって欲しい桁の数値を取るの?
それじゃあ、まず先に百の位までの数値の取り方をずらっと書いちゃいますね!
num = 123
# 100の桁が欲しい場合
digit_100 = (num / 100) % 10
# 10の桁が欲しい場合
digit_10 = (num / 10) % 10
# 1の桁が欲しい場合
digit_1 = (num / 1) % 10
puts "100の桁の数値は#{digit_100}です"
puts "10の桁の数値は#{digit_10}です"
puts "1の桁の数値は#{digit_1}です"
さぁ、これでコードの記述が終わりましたね!!
これを実行するとちゃんと欲しい桁の値が取れているのか...
##結果
100の桁の数値は1です
10の桁の数値は2です
1の桁の数値は3です
ちゃんと出力されましたね!!
それじゃあ細かく見ていきましょう。
##解説
それじゃあ10の桁の場合を見ていきましょう。
digit_10 = (num / 10) % 10
となっていますね。
まず数式の前半部分を計算すると12が返ってきます。
ここから元々10の桁だった部分が、今は1の桁に移動していますね。
あとは10の桁以上の数値が不要になるわけなので計算して1の桁だけが欲しいところ...
そうか!!
**10で割って1の桁を余りとして返せばいいのか!!**ということで後半部分の『%』の出番ですね。
12を10で割った余りを出力結果とするから、
2
が結果として返ってくるわけですね!!
この前半部分の10というところ、今回は10の桁だったので10で割ってますが、1万の桁なら1万で、100万なら100万の桁で割れば欲しい桁の数値が1の桁に返ってきます!!
#なぜ理解するのに時間が必要だった?
今回の説明を見れば『ん?意外と簡単じゃない?なんで理解に時間がかかったの?』と思う方もいらっしゃるかもしれません。
実は今回の桁数取得の方法を考えている時に出されていた問題が**『2桁の数字から数値をそれぞれ取得しなさい』**という旨の問題だったんです!!
先ほどの解説の時にも説明しましたが、1の桁を欲しいのであれば**『10で割った余りを返り値とすればいいだけじゃん』となったんです。
そして10の桁も『10で割った答えだけで桁の数値が取れるじゃん』**となりました。
そうするとどうでしょう。
digit_10 = num / 10
digit_1 = num % 10
というコードになっちゃいました
これでも2桁だけなら答えは一緒なので『あれ...なんでこれでダメなんだ?』となってしまいました...
このコードだと桁数が増えた時に、1の桁と1番上の桁の数値を取得するだけなら対応できますが、中間の桁を取得することができません!!
そのことに気付いたら理解がすぐにできましたが、それに気付くまでに少し時間がかかってしまいました
#結論
こんな簡単そうに見えることでもハマると一切理解ができない。
だが理解できた時の達成感は変えがたいものが有ります。
もう脳汁ドパドパでてる感じでした
#皆さんも困難にぶつかっても諦めずレッツトライ!!