このページについて
このページは、paiza ラーニング内に開設されているコンテンツ「レベルアップ問題集」で取り扱われているプログラミング課題について、独自の見解を述べたものです。
見解については、paizaラーニングの規約に基づき、許可されている範囲でのみ公開していますが、その内容については paiza とは一切関係なく、また paiza の立場を反映したものではありませんのでご注意ください。
挑戦する課題
レベルアップ問題集の文字列処理メニューから「数式の計算 (paizaランク C 相当)」を取り上げます。
以下は、問題公開 Web ページからの引用です。
問題
正しい数式を表す文字列 S が与えられるので、その数式を計算した結果を出力してください。ただし、出てくる計算は足し算・引き算のみとします。
例
- S = “1+1”
答えは 2 となります。 - S = “4+3-2+1”
答えは 6 となります。
入力される値
1 |
S |
- 文字列 S が 1 行で与えられます。
期待する出力
S を数式として見たときの計算結果を 1 行で出力してください。条件
- 1 ≦ | S| ≦ 10000 ( | S| は、 S の文字数です。)
- 計算過程で出てくる値や計算結果は必ず 10^8 以下になります。
- S は正しい表記の式です。
考え方
執筆中
数値の配列と符号の配列を作り、逐次加算する
解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import Foundation // 1行読み込む let s = readLine()! // 符号と数値に分解 let numbers = s.split { "+-".contains($0) }.map { Int($0)! } let signs = s.split { "0123456789".contains($0) } // 合計に初期値を代入 var sum = numbers[0] // 逐次合計する for i in 1..<numbers.count { let value = numbers[i] sum += (signs[i - 1] == "+" ? value : -value) } // 合計の出力 print(sum) |