理解十进制整数转二进制整数
有这样一段代码:
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\ \ \cdots\cdots\ k_0\\
\ \\
\frac{(S)_{10}}{2^2}=k_n2^{n-2}+k_{n-1}2^{n-3}+\dotsm+k_1\ \ \cdots\cdots\ k_1
\\.\\.\\.\\
\frac{(S)_{10}}{2^n}=k_n\ \ \cdots\cdots\ k_{n-1}\\
\ \\
\frac{(S)_{10}}{2^{n+1}}=0\ \ \cdots\cdots\ k_n
\]
按以上过程可写得程序。
代码来自《算法(第四版)》习题 1.3.5
浙公网安备 33010602011771号