一開始我先創造一個 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題庫目錄
回首頁
沒有留言:
張貼留言