2010年3月20日 星期六

Problem 575 Skew Binary,2n - 1 進位

此題為要求輸入一個2n - 1的進位轉 10 進位的題目。

一開始我先創造一個 1 ~ 231 - 1 的位數陣列 binary,依次擺入各位數所需乘的數值:
unsigned int binary[31], total;

void create()
{
int i, j = 1;
for (i = 0, j = 2; i < 31; i ++, j *= 2)
binary[i] = j - 1;
}

則在程式一開始須先呼叫 create() 函式,讓它建構出來,再讀入字串,倒著擺入 rev 陣列:
scanf("%s", str);
if (str[0] == '0') break;
total = 0;
for (i = 0; i < strlen(str); i ++)
rev[i] = str[strlen(str) - i - 1] - '0';

最後再將 rev 陣列與 binary 陣列互相相乘累加即可:
for (i = 0; i < strlen(str); i ++)
total += rev[i] * binary[i];
printf("%ld\n", total);

By David.K

p575題目連結
回ACM題庫目錄
回首頁

沒有留言: