2進数に変換
0 以上の整数 n が与えられる。
n を 2 進数に変換して出力せよ。
先頭に余分な 0 は付けない。
ただし n が 0 なら 0 を出力する。
- 入力
- 0 ≤ n ≤ 10^9
- 出力
- n の 2 進数表記を一行
13
1101
0
0
0 以上の整数 n が与えられる。
n を 2 進数に変換して出力せよ。
先頭に余分な 0 は付けない。
ただし n が 0 なら 0 を出力する。
13
1101
0
0
実行すると、これらの行が順に input()・標準入力に渡されます(実行中に入力を求めません)。
$ 準備完了
コードを入力して解くにはパソコンで開いてください。モバイルでは問題と解答を見られます。
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); } で、/ は小数まで割るので商を使います。
n = int(input())if n == 0: print(0)else: digits = "" while n > 0: digits = str(n % 2) + digits n //= 2 print(digits)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);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);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()); }}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); }}#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';}#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;}n = コンソール.行読み().数に();もし (n == 0){ コンソール.書く("0");}でなければ{ digits = ""; 間 (n > 0) { digits = n % 2 + digits; n = 数学.商(n, 2); } コンソール.書く(digits);}