한 줄에 "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
오류 목록00F8 ↓ · ⇧F8 ↑
입력(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)); } 그만;}