白駿5613計算機プログラム


質問する


加算、減算、乗算、除算を行う計算機プログラムを作成します.
入力
入力された行ごとに、数値と+、-、/、=が交互に与えられます.最初の行は数字です.演算子の優先度を考慮せずに入力順に計算し、=の場合はその結果に出力します.与えられた数は108以下の正の整数である.計算の結果は0または負の値とすることができるが、-108~108の範囲を超えない.なお、除算では小数点は切り捨てられている.したがって、100/33=99となります.
被除数が負数の場合、除算を入力として与えることはできません.
しゅつりょく
計算結果を1行目に出力します.
入力例1
1
  • 1

  • サンプル出力1
    2
    入力例2

    10


    21
  • 5

  • サンプル出力2
    -55
    入力例3
    100
    /
    3
  • 3

  • サンプル出力3
    99

    解法


    最初に入力した数字は重要です.
    重複する場合は、数値を変数に、演算子を変数に、現在の等号が入力されているかどうかを決定します.
    現在の入力が数値の場合は、以前に受信した演算子が分岐されます.4つの演算タイプに対して演算を実行します.この結果は、以下の入力で以前に受信した数値として使用できます.
    以前に受け取った演算子がない場合、これは最初に入力された数値になります.
    現在の入力が演算子であり、演算子が等号演算子である場合、正解は以前に受信した数値または計算結果の値であるため、出力され、繰り返しが終了します.
    現在の入力が等号でない場合は、演算子を保存し、次に数値を入力するときにこの値を使用して演算します.

    コード#コード#

    prev = result = 0
    op = ''
    while True:
        now = input()
        if now.isdigit():           # 입력이 숫자이면
            if op == '+':           # 이전 연산자가 +이면 더하고 갱신
                prev += int(now)
            elif op == '-':         # 이전 연산자가 -이면 빼고 갱신
                prev -= int(now)
            elif op == '*':         # 이전 연산자가 *이면 곱하고 갱신
                prev *= int(now)
            elif op == '/':         # 이전 연산자가 /이면 나누고 갱신
                prev //= int(now)
            else:                   # 이전 연산자가 없다면 (처음 받는 숫자 입력이면) 그 입력 숫자로 갱신
                prev = int(now)
        else:                       # 입력이 연산자이면
            if now == '=':          # 입력이 연산자 중 =이면 정답은 이전 값이고 탈출
                result = prev
                break
            op = now                # 연산자 갱신
    print(result)
    
    白駿5613計算機プログラム