{ }codelper
switch정수 나눗셈P0021

사칙 계산기

한 줄에 "a op b"가 빈칸 하나씩으로 나뉘어 주어진다.
op는 +, -, *, / 중 하나다.
계산 결과를 정수로 출력하라.
/는 정수 나눗셈이고, 몫의 소수 부분은 0 쪽으로 버린다(7 / 2 = 3, -7 / 2 = -3, 7 / -2 = -3).
/ 에서 b가 0이면 "오류"를 출력하라.

입력
-1,000,000 ≤ a, b ≤ 1,000,000 (정수).
op는 +, -, *, / 중 하나
출력
결과 정수 하나, 또는 "오류"
예시 1 · stdin
-7 / 2
stdout
-3
예시 2 · stdin
1000000 * 1000000
stdout
1000000000000
main.py
입력(stdin)

실행하면 이 줄들이 차례로 input()·표준 입력으로 들어가요(실행 중에 묻지 않아요).

$ 준비됐어요

코드를 입력해 풀려면 PC에서 열어 주세요. 모바일에서는 문제와 풀이를 볼 수 있어요.

다른 언어로는?언어별 풀이 보기 · 8개 언어 풀이

음수 나눗셈의 방향이 언어마다 달라요.
C·C++·Java·C#는 정수끼리 /가 0 쪽으로 버려서 -7 / 2 == -3이지만, Python의 //는 내림이라 -4예요.
Python은 abs(a) // abs(b)에 부호를 붙이거나 int(a / b)(이 문제의 범위에서는 정확)를 써요.
JS·TS의 /는 늘 소수 나눗셈이라 Math.trunc(a / b)가 맞고 Math.floor는 Python과 같은 함정에 빠져요.
크레이콘도 /는 3.5를 내므로 수학.몫(a, b)(0 쪽으로 버림)를 써요.
곱은 최대 1조라 C·Java·C#의 int(약 21억까지)는 넘치니 long long/long으로 받아요.
0으로 나누기는 먼저 막아야 해요: Java는 ArithmeticException, C#은 DivideByZeroException으로 멈추고, C·C++은 정의되지 않은 동작(보통 프로그램이 죽음), JS는 Infinity/NaN이 나와요.
갈래 고르기는 C·C++·Java·C#·JS의 switch, Python 3.10+의 match.
크레이콘은 선택 (op) { 경우 "+": … 그밖에: … }로 쓰고, C#처럼 다음 경우로 이어 내려가지 않아요(끝의 그만;은 써도 안 써도 돼요).
C·C++·Java·JS는 break를 빼먹으면 다음 경우까지 실행되는 함정이 있어요.
JS는 0 * -5가 -0이고 console.log(-0)은 -0을 찍으니 String(…)으로 바꿔 출력해요.

Pythonmain.py · 16 줄
a, op, b = input().split()a, b = int(a), int(b)match op:    case "+":        print(a + b)    case "-":        print(a - b)    case "*":        print(a * b)    case "/":        if b == 0:            print("오류")        else:            # Python의 // 는 내림(-7 // 2 == -4)이라 크기로 나눈 뒤 부호를 붙인다            q = abs(a) // abs(b)            print(q if (a < 0) == (b < 0) else -q)
JavaScriptmain.js · 12 줄
const [x, op, y] = require("fs").readFileSync(0, "utf8").trim().split(/\s+/);const a = Number(x);const b = Number(y);let result;switch (op) {  case "+": result = a + b; break;  case "-": result = a - b; break;  case "*": result = a * b; break;  case "/": result = b === 0 ? "오류" : Math.trunc(a / b); break;}// String(-0) 은 "0" (console.log(-0) 은 "-0"을 찍는다)console.log(String(result));
TypeScriptmain.ts · 13 줄
import { readFileSync } from "node:fs";const [x, op, y]: string[] = readFileSync(0, "utf8").trim().split(/\s+/);const a: number = Number(x);const b: number = Number(y);let result: number | string = "";switch (op) {  case "+": result = a + b; break;  case "-": result = a - b; break;  case "*": result = a * b; break;  case "/": result = b === 0 ? "오류" : Math.trunc(a / b); break;}// String(-0) 은 "0" (console.log(-0) 은 "-0"을 찍는다)console.log(String(result));
JavaMain.java · 18 줄
import java.util.Scanner; public class Main {    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        long a = sc.nextLong();        String op = sc.next();        long b = sc.nextLong();        String result = switch (op) {            case "+" -> String.valueOf(a + b);            case "-" -> String.valueOf(a - b);            case "*" -> String.valueOf(a * b);            case "/" -> b == 0 ? "오류" : String.valueOf(a / b);            default -> "";        };        System.out.println(result);    }}
C#Main.cs · 20 줄
using System; class Program{    static void Main()    {        string[] t = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries);        long a = long.Parse(t[0]);        long b = long.Parse(t[2]);        string result = t[1] switch        {            "+" => (a + b).ToString(),            "-" => (a - b).ToString(),            "*" => (a * b).ToString(),            "/" => b == 0 ? "오류" : (a / b).ToString(),            _ => "",        };        Console.WriteLine(result);    }}
C++main.cpp · 16 줄
#include <iostream> int main() {    long long a, b;    char op;    std::cin >> a >> op >> b;    switch (op) {        case '+': std::cout << a + b << "\n"; break;        case '-': std::cout << a - b << "\n"; break;        case '*': std::cout << a * b << "\n"; break;        case '/':            if (b == 0) std::cout << "오류\n";            else std::cout << a / b << "\n";            break;    }}
Cmain.c · 17 줄
#include <stdio.h> int main(void) {    long long a, b;    char op;    scanf("%lld %c %lld", &a, &op, &b);    switch (op) {        case '+': printf("%lld\n", a + b); break;        case '-': printf("%lld\n", a - b); break;        case '*': printf("%lld\n", a * b); break;        case '/':            if (b == 0) puts("오류");            else printf("%lld\n", a / b);            break;    }    return 0;}
Craykonmain.cray · 26 줄
t = 콘솔.줄읽기().나누기();a = t[0].수로변환();op = t[1];b = t[2].수로변환();선택 (op){    경우 "+":        콘솔.쓰기(a + b);        그만;    경우 "-":        콘솔.쓰기(a - b);        그만;    경우 "*":        콘솔.쓰기(a * b);        그만;    그밖에:        만약 (b == 0)        {            콘솔.쓰기("오류");        }        아니면        {            콘솔.쓰기(수학.몫(a, b));        }        그만;}