{ }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()・標準入力に渡されます(実行中に入力を求めません)。

$ 準備完了

コードを入力して解くにはパソコンで開いてください。モバイルでは問題と解答を見られます。

ほかの言語では?言語別の解答を見る · 8 言語の解答

2 で割った余りを集めると下の桁から出てくるので、前に付けるか、集めてから反転します。
よくある落とし穴は while (n > 0) だけで書くこと — n = 0 だと一回も回らず空行になります。
本体を先に一度回す do … while(Java・C#・C・C++・JavaScript・TypeScript)がぴったりで、do のない Python・Craykon は 0 を別に扱います。
組み込み:Python bin(n)[2:]、JavaScript n.toString(2)、Java Integer.toBinaryString(n)、C# Convert.ToString(n, 2) — どれも 0 を "0" にしてくれます。
Craykon は 間 (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);}