問題定義:
在 skew binary表示中, 第 k 位的值 xk表示 xk.(2k+1-1)。每個位上的可能數字是 0 或1,最後面乙個非零位可以是 2,例如, 10120(skew) = 1*(2^5-1) + 0*(2^4-1) + 1*(2^3-1)+ 2*(2^2-1)+ 0*(2^1-1) = 31 + 0 + 7 + 6 + 0 = 44.前十個 skew數是 0、1、2、10、11、12、20、100、101、以及 102。
輸入資料
輸入包含一行或多行,每行包含乙個整數 n。如果 n = 0 表示輸入結束,否則 n是乙個 skew 數
輸出要求
對於每乙個輸入,輸出它的十進位制表示。轉換成十進位制後, n 不超過 2^31-1 =2147483647
輸入樣例
10120
200000000000000000000000000000
101000000000000000000000000000000
11100
11111000001110000101101102000
0輸出樣例
442147483646
3214748364747
1041110737
解題思路
skew數的相鄰位上,基數之間沒有等比關係。計算每一位的基數後,再把乙個 skew數轉換成十進位制表示就很簡單。對於長度為 k的 skew數,最後一位數字的基數為 2^k-1。由於轉換成十進位制後, n 不超過 231-1,因此輸入 skew數的最大長度不超過 31。
用乙個整型陣列 base[31],依次儲存 skew數最末位、倒數第 2位、…..、第 31位的基數值。使用這個陣列,把每個 skew數轉換成對應的十進位制數。
base[0] = 1
base[k] = 2^(k+1)-1 = 2 * (2^k - 1)+1 = 2 * base[k -1] + 1
**如下:
201409 1 相鄰數對
試題編號 201409 1 試題名稱 相鄰數對 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 給定n個不同的整數,問這些數中有多少對整數,它們的值正好相差1。輸入格式 輸入的第一行包含乙個整數n,表示給定整數的個數。第二行包含所給定的n個整數。輸出格式 輸出乙個整數,表示值正好...
201409 1 相鄰數對
試題編號 201409 1 試題名稱 相鄰數對 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 給定n個不同的整數,問這些數中有多少對整數,它們的值正好相差1。輸入格式 輸入的第一行包含乙個整數n,表示給定整數的個數。第二行包含所給定的n個整數。輸出格式 輸出乙個整數,表示值正好...
201409 1 相鄰數對
問題描述 給定n個不同的整數,問這些數中有多少對整數,它們的值正好相差1。輸入格式 輸入的第一行包含乙個整數n,表示給定整數的個數。第二行包含所給定的n個整數。輸出格式 輸出乙個整數,表示值正好相差1的數對的個數。樣例輸入 610 2 6 3 7 8 樣例輸出 3樣例說明 值正好相差1的數對包括 2...