題目描述
將一個長度最多爲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;
}