EX11 - 電卓をつくろう2 解説 /

実行時間制限: 2 sec / メモリ制限: 256 MB

説明ページに戻る

問題文

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


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

入力の形式
計算の数N
最初の値A
演算子op_1 計算する値B_1
演算子op_2 計算する値B_2
\vdots
演算子op_N 計算する値B_N

次の入力は((2 + 1) × 3) ÷ 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の計算結果を出力する。 小数点以下は切り捨てて出力する。
Bが0の場合はerrorと出力し、それ以降は出力を行わない。

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

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


サンプルプログラム
#include <bits/stdc++.h>
using namespace std;

int main() {
  int N, A;
  cin >> N >> A;

  // ここにプログラムを追記
}

制約

  • 0≦N≦7
  • 0≦A, B_i≦10
  • A, B_i, Nは整数
  • op_i+, -, *, / のいずれか一つ

入力

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

N
A
op_1 B_1
op_2 B_2
\vdots
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つの整数を入力で一つずつ受け取り、受け取った整数を足して出力します。
また、今回の問題と同様に、出力が何行目かも同時に出力します。
今回の問題を解く際の参考にしてください。

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

#include <bits/stdc++.h>
using namespace std;

int main() {
  int sum = 0;

  for (int i = 0; i < 5; i++) {
    int x;
    cin >> x;

    sum += x;

    cout << i + 1 << ":" << sum << endl;
  }
}

ヒント入力

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:-8
4:-8
5:-8
6:-18
7:-90

テスト入力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:-8
4:-8
5:-8
6:-18
7:-90

テスト入力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


解答例

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

クリックで解答例を見る

#include <bits/stdc++.h>
using namespace std;

int main() {
  int N, A;
  cin >> N >> A;

  for (int i = 0; i < N; i++) {
    int x;
    string op;
    cin >> op >> x;

    if (op == "+") {
      A += x;
    }
    else if (op == "-") {
      A -= x;
    }
    else if (op == "*") {
      A *= x;
    }
    else if (op == "/" && x != 0) {
      A /= x;
    }
    else {
      cout << "error" << endl;
      break;
    }

    cout << i + 1 << ":" << A << endl;
  }

}