B3972 [语言月赛 202405] 二进制 题解

· · 题解

Source & Knowledge

2024 年 5 月语言月赛,由洛谷网校入门计划/基础计划提供。

题目大意

给定一个正整数 n,请你将 n 不停地除以 2,并输出此时的商和余数,直到 n = 0 为止。

题目分析

这道题显然要使用循环结构。由于我们并不知道要循环几次,所以考虑使用 while 循环。

首先读入 n。注意数据范围是 1 \leq n \leq 10^{18},因此要使用 long long

long long n;
cin >> n;

接下来实现循环。由于我们要一直输出答案直到 n= 0,所以 while 循环的条件就是 n \neq 0。然后在循环体内直接输出商和余数,每次输出后将 n 除以 2 即可:

while(n != 0) {
    cout << n/2 << ' ' << n%2 << '\n';
    n /= 2;
}

视频讲解