EX9 - 電卓をつくろう2 Editorial /

Time Limit: 2 sec / Memory Limit: 1024 MB

説明ページに戻る

問題文

電卓の操作が与えられるので、計算途中の値と計算結果の値を出力してください。


電卓の操作は次の形式で入力されます。

入力の形式
計算の数N
最初の値A
演算子\mathrm{op}_1 計算する値B_1
演算子\mathrm{op}_2 計算する値B_2
\vdots
演算子\mathrm{op}_N 計算する値B_N

次の入力は ((2 + 1) \times 3) \div 2 を表しています。

入力例
3
2
+ 1
* 3
/ 2

出力では「何行目の出力か」と、「計算途中の値」を出力してください。

出力の形式
1 1個目の計算結果
2 2個目の計算結果
\vdots
N N個目の計算結果

次の出力は上の入力例に対する出力です。

出力例
1 3
2 9
3 4

与えられる入力のパターンと対応する処理は以下の表の通りです。

入力 処理 備考
+ B それまでの計算結果に B を足し、その値を出力する。
- B それまでの計算結果から B を引き、その値を出力する。
* B それまでの計算結果に B を掛け、その値を出力する。
/ B それまでの計算結果を B で割り、その値を出力する。 小数点以下は切り捨てて計算を行う。
B0 の場合はerrorと出力し、それ以降は出力を行わない。

/ B において、B0 の場合は error と出力し、それ以降は出力を行わない ことに注意してください。

ページ末尾に問題のヒントがあります。詰まったら見てみましょう。


サンプルプログラム
N = int(input())
A = int(input())
# ここにプログラムを追記

制約

  • 1 \le N \le 7
  • 0 \le A, B_i \le 10
  • A, B_i, N は整数
  • \mathrm{op}_i+, -, *, / のいずれか

入力

入力は次の形式で標準入力から与えられます。

N
A
\mathrm{op}_1 B_1
\mathrm{op}_2 B_2
\vdots
\mathrm{op}_N B_N

出力

1 1個目の計算結果
2 2個目の計算結果
\vdots
N N個目の計算結果

出力の最後には改行が必要です。


ジャッジでは以下の入力例以外のケースに関してもテストされることに注意。

入力例1

3
2
+ 1
* 3
/ 2

出力例1

1 3
2 9
3 4

問題文中で説明した入出力です。


入力例2

2
3
/ 2
/ 2

出力例2

1 1
2 0

割り算では小数点以下を切り捨てます。


入力例3

4
3
+ 1
/ 0
* 2
- 10

出力例3

1 4
error

割り算で B_i0 の場合は error と出力し、それ以降は出力をしないことに注意してください。


入力例4

7
10
* 10
* 10
* 10
* 10
* 10
* 10
* 10

出力例4

1 100
2 1000
3 10000
4 100000
5 1000000
6 10000000
7 100000000

ヒント1

次のプログラムは、5つの整数を入力で一つずつ受け取り、受け取った整数を足して出力します。
また、今回の問題と同様に、出力が何行目かも同時に出力します。
今回の問題を解く際の参考にしてください。

クリックでヒントプログラムを見る

total = 0

for i in range(5):
    x = int(input())

    total += x

    # 行番号 合計値 の形式で出力
    print(i + 1, total)

ヒント入力

3
4
2
1
10

ヒント出力

1 3
2 7
3 9
4 10
5 20

ヒント2

ジャッジでテストされる入力のうち2つをヒントとして示します。
サンプルは全てあっていてWAの原因がわからない人は、以下のケースに正解しているか確かめてみましょう。

クリックでテストケースを見る

テスト入力1

7
0
- 5
* 7
/ 4
+ 0
+ 0
- 10
* 5

テスト出力1

1 -5
2 -35
3 -9
4 -9
5 -9
6 -19
7 -95

テスト入力2

6
0
/ 4
/ 3
/ 5
+ 3
/ 7
/ 1

テスト出力2

1 0
2 0
3 0
4 3
5 0
6 0

テスト入出力

書いたプログラムがACにならず、原因がどうしてもわからないときだけ見てください。

クリックでテスト入出力を見る

テスト入力1
7
0
- 5
* 7
/ 4
+ 0
+ 0
- 10
* 5
テスト出力1
1 -5
2 -35
3 -9
4 -9
5 -9
6 -19
7 -95

テスト入力2
6
0
/ 4
/ 3
/ 5
+ 3
/ 7
/ 1
テスト出力2
1 0
2 0
3 0
4 3
5 0
6 0

テスト入力3
3
1
* 4
* 3
/ 0
テスト出力3
1 4
2 12
error

テスト入力4
7
0
* 2
/ 0
+ 1
/ 0
+ 5
* 2
- 10
テスト出力4
1 0
error

解答例

必ず自分で問題に挑戦してみてから見てください。

クリックで解答例を見る

N = int(input())
A = int(input())

for i in range(N):
    op, x = input().split()
    x = int(x)

    if op == "+":
        A += x
    elif op == "-":
        A -= x
    elif op == "*":
        A *= x
    elif op == "/" and x != 0:
        A //= x
    else:
        print("error")
        break

    print(i + 1, A)