기초 · 04
계산과 나눗셈
더하기·빼기·곱하기는 같지만, 나눗셈은 언어마다 달라요.
+ - *는 어느 언어에서나 같지만, 나눗셈과 나머지(%)는 언어마다 달라요.
아래 예제는 두 수로 더하기·빼기·곱하기·몫·나머지·소수 나눗셈을 차례로 찍어요.
a, b = map(int, input().split())print(a + b)print(a - b)print(a * b)print(a // b)print(a % b)print(a / b)const [a, b] = require("fs").readFileSync(0, "utf8").trim().split(/\s+/).map(Number);console.log(a + b);console.log(a - b);console.log(a * b);console.log(Math.trunc(a / b));console.log(a % b);console.log(a / b);import { readFileSync } from "node:fs";const [a, b]: number[] = readFileSync(0, "utf8").trim().split(/\s+/).map(Number);console.log(a + b);console.log(a - b);console.log(a * b);console.log(Math.trunc(a / b));console.log(a % b);console.log(a / b);import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a = sc.nextInt(), b = sc.nextInt(); System.out.println(a + b); System.out.println(a - b); System.out.println(a * b); System.out.println(a / b); System.out.println(a % b); System.out.println((double) a / b); }}using System; class Program{ static void Main() { string[] p = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries); int a = int.Parse(p[0]), b = int.Parse(p[1]); Console.WriteLine(a + b); Console.WriteLine(a - b); Console.WriteLine(a * b); Console.WriteLine(a / b); Console.WriteLine(a % b); Console.WriteLine((double)a / b); }}#include <iostream> int main() { int a, b; std::cin >> a >> b; std::cout << a + b << '\n'; std::cout << a - b << '\n'; std::cout << a * b << '\n'; std::cout << a / b << '\n'; std::cout << a % b << '\n'; std::cout << (double)a / b << '\n';}#include <stdio.h> int main(void) { int a, b; scanf("%d %d", &a, &b); printf("%d\n", a + b); printf("%d\n", a - b); printf("%d\n", a * b); printf("%d\n", a / b); printf("%d\n", a % b); printf("%g\n", (double)a / b); return 0;}nums = 콘솔.수들읽기();a = nums[0];b = nums[1];콘솔.쓰기(a + b);콘솔.쓰기(a - b);콘솔.쓰기(a * b);콘솔.쓰기(수학.몫(a, b));콘솔.쓰기(a % b);콘솔.쓰기(a / b);7 2
9 5 14 3 1 3.5
핵심
- 정수끼리 나누면 정수가 되는 언어가 있어요:
7 / 2→3(소수 부분을 버려요).
수가 한 종류인 언어는 바로3.5예요. - 소수 결과가 필요하면 나누기 전에 한쪽을 실수로 바꿔요.
- 음수를 나누면 언어가 두 편으로 갈려요.
0 쪽으로 버리는 편(-3.5→-3)과 내림하는 편(-3.5→-4)이에요. - 정수에는 한계가 있어요.
넘치면(overflow) 오류 없이 엉뚱한 값이 되기도 해요. - 0으로 나누면 오류로 멈추는 언어도 있고, 조용히
Infinity를 주는 언어도 있어요.
언어별로 쓰는 법
| Python | //는 몫(7 // 2 → 3), /는 늘 소수(7 / 2 → 3.5, 6 / 2도 3.0).음수는 내림이에요. 정수는 넘치지 않아요. 0으로 나누면 ZeroDivisionError |
|---|---|
| JavaScript | 수가 한 종류라 7 / 2 → 3.5.몫은 Math.trunc(a / b).Math.floor는 음수에서 달라요(Math.floor(-3.5) → -4).2^53을 넘으면 끝자리가 틀려져요( 9007199254740993 → 9007199254740992).0으로 나누면 Infinity |
| TypeScript | JavaScript와 같아요 |
| Java | 정수 ÷ 정수는 정수, 소수는 (double)a / b → 3.5.0 쪽으로 버려요. int가 넘치면 오류 없이 돌아 넘어가요.큰 수는 long.정수를 0으로 나누면 ArithmeticException |
| C# | Java와 같아요. 정수를 0으로 나누면 DivideByZeroException |
| C++ | 정수 ÷ 정수는 정수, 소수는 (double)a / b.0 쪽으로 버려요. 부호 있는 정수가 넘치거나 0으로 나누면 정의되지 않은 동작이에요. 큰 수는 long long |
| C | C++와 같아요 |
| Craykon | 수가 한 종류라 7 / 2 → 3.5.몫은 수학.몫(a, b), 내림은 수학.내림.%는 0 쪽으로 버려요.2^53을 넘으면 끝자리가 틀려지고, 0으로 나누면 Infinity |
자주 하는 실수
x % 2 == 1로 홀수를 찾았어요Java · C# · C · C++ · JavaScript · TypeScript · Craykon
int x = -3;
printf("%d\n", x % 2);→ -1 — 그래서 x % 2 == 1은 거짓이 되어 음수 홀수를 놓쳐요
x % 2 != 0으로 써요.
어느 언어에서나 안전해요.
나눈 뒤에 실수로 바꿨어요Java · C# · C · C++
int a = 7, b = 2;
double d = (double)(a / b);→ 3.0 — 괄호 안에서 정수 나눗셈이 먼저 끝나요
나누기 전에 바꿔요: (double)a / b → 3.5.
int가 넘쳤어요Java · C# · C · C++
int x = 2147483647;
x = x + 1;→ Java·C#은 오류 없이 -2147483648. C·C++는 정의되지 않은 동작이에요
큰 수는 long(C·C++는 long long)을 써요.
언어마다 다른 점
음수 나눗셈은 언어마다 달라요.
Python은
음수 나눗셈은 언어마다 달라요.
Python은
-7 // 2 → -4, -7 % 2 → 1(내림)이고, C·C++·Java·C#·JavaScript(Math.trunc)·크레이콘(수학.몫)은 몫 -3, 나머지 -1(0 쪽으로 버림)이에요.