2進制轉化為3進制
總時間限制:
1000ms
記憶體限制:
65536kB
描述
輸入一個2進制的數,要求輸出該2進制數的3進制表示。
在3進制的表示中,隻有0,1,2三種符号
輸入
第1行是測試資料的組數n,後面跟着n行輸入。每組測試資料占1行,包括一個以0和1組成的字元串,字
符串長度至少是1,至多是64
輸出
n行,每行輸出對應一個輸入。
樣例輸入
2
10110
1011
樣例輸出
211
102
問題連結:Bailian3709 2進制轉化為3進制
問題分析:(略)
程式說明:
2進制數有可能有64位,是以需要用ULL類型存儲。
轉換後的結果是逆序的,是以輸出是需要逆序輸出。
需要考慮特殊情形,如果值為0,需要保證正确輸出結果。
題記:(略)
AC的C語言程式如下:
/* Bailian3709 2進制轉化為3進制 */
#include <stdio.h>
#define N 64
typedef unsigned long long ULL;
int main(void)
{
int n, i;
char c, ans[N];
ULL v;
scanf("%d", &n);
getchar();
while(n--) {
v = 0;
/* 讀入資料 */
while((c = getchar()) != '\n') {
v <<= 1;
v += c - '0';
}
/* 轉換為3進制 */
if(v == 0) {
ans[0] = '0';
i = 1;
} else {
i = 0;
while(v) {
ans[i++] = '0' + v % 3;
v /= 3;
}
}
/* 輸出結果 */
while(i>0)
putchar(ans[--i]);
putchar('\n');
}
return 0;
}