このページについて
このページは、paiza ラーニング内に開設されているコンテンツ「レベルアップ問題集」で取り扱われているプログラミング課題について、独自の見解を述べたものです。
見解については、paizaラーニングの規約に基づき、許可されている範囲でのみ公開していますが、その内容については paiza とは一切関係なく、また paiza の立場を反映したものではありませんのでご注意ください。
挑戦する課題
レベルアップ問題集の文字列処理メニューから「数値から文字列への変換 (paizaランク D 相当)」を取り上げます。
以下は、問題公開 Web ページからの引用です。
問題
数値 X , Y が与えられるので、X + Y の計算結果の先頭から N 文字目の数字を出力してください。
例
- X = 813 , Y = 813 , N = 1 のとき
X + Y = 1626 の 1 文字目である 1 を出力してください。 - X = -813 , Y = 813 , N = 1 のとき
X + Y = 0 の 1 文字目である 0 を出力してください。 - X = 10000 , Y = -813 , N = 3 のとき
X + Y = 9187 の 3 文字目である 8 を出力してください。
入力される値
1 2 3 |
X Y N |
- 1 行目では数値 X が、 2 行目では数値 Y , 3 行目では数値 N が与えられます。
期待する出力
答えとなる数字を 1 行で出力してください。
条件
- -10^12 ≦ X , Y ≦ 10^12
- 0 ≦ X + Y
- X + Y の計算結果の桁数は 13 未満
考え方
与えられる3行の数値としての文字列を数値に変換する部分については難しい話ではない。
また、今回の場合、 X + Y の値は 0 以上であることが保証されているため、符号について考慮する必要もない。
したがって、 X + Y の結果を文字の配列に分解し、指定された要素だけを出力するようにすれば良い。
解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// 入力された一連の文字列を Int に変換し、配列に入れる let ia = Array(AnyIterator { readLine() }).map { Int($0)! } // 問題文にあわせて再代入 let x = ia[0] let y = ia[1] let n = ia[2] // x + y の結果を文字列にしたあと、文字列の配列に分解する let sum = String(x + y).map { String($0) } // 指定された要素だけを出力する print(sum[n - 1]) |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// 入力された一連の文字列を Int に変換し、配列に入れる let ia = Array(AnyIterator { readLine() }).map { Int($0)! } // 問題分にあわせて再代入 let x = ia[0] let y = ia[1] let n = ia[2] // x + y の結果を文字列にしたあと、文字列の配列に分解する let sum = String(x + y) // 指定された要素だけを出力する print(sum[sum.index(sum.startIndex, offsetBy: n - 1)]) |