[codeup] 1943 進制轉換

題目描述

將一個長度最多爲30位數字的十進制非負整數轉換爲二進制數輸出。

輸入

多組數據,每行爲一個長度不超過30位的十進制非負整數。(注意是10進制數字的個數可能有30個,而非30bits的整數)

輸出

每行輸出對應的二進制數。

樣例輸入

0
1
3
8

樣例輸出

0
1
11
1000

IDEA

長整數用字符串形式存儲,主要解決的問題是字符串如何進行除法和餘數。餘數不用多說,就是最後一位餘2就行。除法則應該按照平時手算除法的順序進行,比如:

for (i = 0; i < len - 1; i++) {
	s[i+1] += (s[i] % 2) * 10;
	s[i] /= 2;
}

剩下的就是依照平時的整數進制轉換的順序來即可。

SOLUTION

#include <stdio.h>
#include <string.h>

int main()
{
	int i, len, num, sum;
	char s[100];
	char ans[100];

	while (scanf("%s", s) != EOF) {
		len = strlen(s);
		for (i = 0; i < len; i++)
			s[i] -= '0';
		
		num = 0;
		memset(ans, 0, sizeof ans);

		do {
			/* sum of each digit */
			sum = 0;

			/* % 2 */
			ans[num++] = s[len - 1] % 2 + '0';

			/* / 2 */
			for (i = 0; i < len - 1; i++) {
				s[i+1] += (s[i] - ((s[i] >> 1) << 1)) * 10;
				s[i] >>= 1;
				sum += s[i];
			}
			s[i] >>= 1;
			sum += s[i];
		} while (sum != 0);

		while (num--)
			putchar(ans[num]);
		putchar('\n');
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章