{ }codelper
진법 바꾸기while 반복P0038

2진수로 바꾸기

0 이상의 정수 n이 주어진다.
n을 2진수로 바꾸어 출력하라.
맨 앞에 쓸데없는 0은 붙이지 않는다.
단, n이 0이면 0을 출력한다.

입력
0 ≤ n ≤ 10^9
출력
n의 2진수 표기 한 줄
예시 1 · stdin
13
stdout
1101
예시 2 · stdin
0
stdout
0
main.py
입력(stdin)

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

$ 준비됐어요

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

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

2로 나눈 나머지를 모으면 아랫자리부터 나오니, 앞에 붙이거나 다 모은 뒤 뒤집어야 해요.
흔한 함정은 while (n > 0)만 쓰는 것 — n = 0이면 한 바퀴도 돌지 않아 빈 줄이 나와요.
몸통을 먼저 한 번 도는 do … while(Java·C#·C·C++·JavaScript·TypeScript)이 딱 맞고, do가 없는 Python·크레이콘은 0을 따로 처리해요.
이미 있는 도구: Python bin(n)[2:], JavaScript n.toString(2), Java Integer.toBinaryString(n), C# Convert.ToString(n, 2) — 모두 0을 "0"으로 내 줘요.
크레이콘은 동안 (n > 0) { … n = 수학.몫(n, 2); }이고, /는 소수까지 나누니 몫을 써요.

Pythonmain.py · 9 줄
n = int(input())if n == 0:    print(0)else:    digits = ""    while n > 0:        digits = str(n % 2) + digits        n //= 2    print(digits)
JavaScriptmain.js · 7 줄
let n = Number(require("fs").readFileSync(0, "utf8").trim());let digits = "";do {  digits = (n % 2) + digits;  n = Math.floor(n / 2);} while (n > 0);console.log(digits);
TypeScriptmain.ts · 8 줄
import { readFileSync } from "node:fs";let n: number = Number(readFileSync(0, "utf8").trim());let digits = "";do {  digits = (n % 2) + digits;  n = Math.floor(n / 2);} while (n > 0);console.log(digits);
JavaMain.java · 13 줄
import java.util.Scanner; public class Main {    public static void main(String[] args) {        int n = new Scanner(System.in).nextInt();        StringBuilder digits = new StringBuilder();        do {            digits.append(n % 2);            n /= 2;        } while (n > 0);        System.out.println(digits.reverse());    }}
C#Main.cs · 17 줄
using System;using System.Text; class Program{    static void Main()    {        int n = int.Parse(Console.ReadLine().Trim());        var digits = new StringBuilder();        do        {            digits.Insert(0, n % 2);            n /= 2;        } while (n > 0);        Console.WriteLine(digits);    }}
C++main.cpp · 15 줄
#include <algorithm>#include <iostream>#include <string> int main() {    int n;    std::cin >> n;    std::string digits;    do {        digits += char('0' + n % 2);        n /= 2;    } while (n > 0);    std::reverse(digits.begin(), digits.end());    std::cout << digits << '\n';}
Cmain.c · 15 줄
#include <stdio.h> int main(void) {    int n;    scanf("%d", &n);    char digits[32];    int len = 0;    do {        digits[len++] = '0' + n % 2;        n /= 2;    } while (n > 0);    for (int i = len - 1; i >= 0; i--) putchar(digits[i]);    putchar('\n');    return 0;}
Craykonmain.cray · 15 줄
n = 콘솔.줄읽기().수로변환();만약 (n == 0){    콘솔.쓰기("0");}아니면{    digits = "";    동안 (n > 0)    {        digits = n % 2 + digits;        n = 수학.몫(n, 2);    }    콘솔.쓰기(digits);}