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

有这样一段代码:

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

posted @ 2022-02-01 04:17  Higurashi-kagome  阅读(233)  评论(0)    收藏  举报