luogu#B3972. [语言月赛 202405] 二进制

[语言月赛 202405] 二进制

题目描述

在介绍十进制转二进制的篇目中,我们总会看到这样的方法:

  • 求出这个数字除以 22余数,然后将余数写在右侧,用商替换原来的数字;
  • 重复以上过程直到这个数字变为 00
  • 最后将右侧的所有余数倒序排列,得到的就是原数字的二进制形式。

小 S 也在学习二进制,不过她很懒,不想计算那么多次除法。于是她找到了你,希望你能为她写一个程序,帮助她得到上述过程中所有的余数

输入格式

一行,一个正整数 nn,表示她想要转成二进制的数字。

输出格式

输出若干行,每一行两个数字 xix_iyiy_i,表示第 ii 次除法得到的商和余数。你应该保证 yiy_i0011

9

4 1
2 0
1 0
0 1

22

11 0
5 1
2 1
1 0
0 1

1

0 1

提示

样例 1 解释

首先,9=2×4+19 = 2 \times 4 + 1,所以第一行输出 4 1,并令 99 变为 44; 然后,4=2×2+04 = 2 \times 2 + 0,所以第二行输出 2 0,并令 44 变为 22
接着,2=2×1+02 = 2 \times 1 + 0,所以第三行输出 1 0,并令 22 变为 11
最后,1=2×0+11 = 2 \times 0 + 1,所以第四行输出 0 1,并令 11 变为 00。过程结束。

样例 2 解释

首先,22=2×11+022 = 2 \times 11 + 0,所以第一行输出 11 0,并令 2222 变为 1111
然后,11=2×5+111 = 2 \times 5 + 1,所以第二行输出 5 1,并令 1111 变为 55
接着,5=2×2+15 = 2 \times 2 + 1,所以第三行输出 2 1,并令 55 变为 22
再然后,2=2×1+02 = 2 \times 1 + 0,所以第四行输出 1 0,并令 22 变为 11; 最后,1=2×0+11 = 2 \times 0 + 1,所以第五行输出 0 1,并令 11 变为 00。过程结束。

数据范围

对于前 30%30 \% 的数据,保证 nn 为若干个 22 的乘积,且 1n1091 \leq n \leq 10^9
对于另 30%30 \% 的数据,保证除法最多只进行 33 次;
对于 100%100 \% 的数据,保证 1n10181 \leq n \leq 10^{18}