理解十进制整数转二进制整数

《算法(第四版)》中的习题 1.3.5 中有这样一段代码:

Stack<Integer> s = new Stack<>();
while (N > 0) {
	s.push(N % 2);
	N = N / 2;
}
for (int d : s) System.out.print(d);
System.out.println();

其作用是打印十进制整数 N 的二进制表示。下面解释该算法背后的道理。

为简化问题,默认输入的整数为正。

二进制整数转十进制整数的过程如下:

\[(k_nk_{n-1}\dotsm k_1k_0)_2=k_n2^n+k_{n-1}2^{n-1}+\dotsm+k_12^1+k_02^0 \]

对于十进制整数 \((S)_{10}\),令:

\[(S)_{10}=k_n2^n+k_{n-1}2^{n-1}+\dotsm+k_12^1+k_02^0 \]

要求 \((S)_{10}\) 的二进制表示,即求 \(k_0\sim k_n\)。而:

\[\frac{(S)_{10}}{2^1}=k_n2^{n-1}+k_{n-1}2^{n-2}+\dotsm+k_1\ \ 余\ k_0\\ \ \\ \frac{(S)_{10}}{2^2}=k_n2^{n-2}+k_{n-1}2^{n-3}+\dotsm+k_1\ \ 余\ k_1 \\.\\.\\.\\ \frac{(S)_{10}}{2^n}=k_n\ \ 余\ k_{n-1}\\ \ \\ \frac{(S)_{10}}{2^{n+1}}=0\ \ 余\ k_n \]

按以上过程可写得程序。

上一篇:赋值运算符


下一篇:数据结构--排序之选择排序