2014-02-20 71 views
1

使用位數組(0或1),我可以將其轉換爲整數並使用按位操作來操作它(檢查一個位置是否爲0或1,switch 0 < - > 1)。 什麼是一個類似的解決方案的任意整數數組? X < < 1在x的末尾添加一個比特0:將整數轉換爲數字,就像位數組一樣

例如,在一個位陣列的我可以通過執行一個移添加新的比特。 對於任意整數的數組,我可以這樣做: (1,2,7) - > 127,然後在末尾添加9我可以做127 * 10 + 9. 但是,如果我想要這個過程是行不通的工作說11(或任何數字與2或更多數字) 結束。

回答

1

乍一看,在我看來,在這種情況下,您必須在添加新號碼之前找出正確的乘數。

例如,如果您有數字127和要追加的98號,你必須做這樣的:new_number = 127*100 + 98,那就是,你必須找到多少位n在新的號碼,並乘在添加它之前由10^n另一個數字。

這裏是我的實現:

int array_to_number(int arr[], int size) { 
    if (size == 0) 
    return 0; 
    int result = arr[0]; 
    int n; 
    int i; 
    int mul; 
    for (i = 1; i < size; i++) { 
    for (n = arr[i], mul = 1; n; mul *= 10, n /= 10) 
     ; /* Intentionally left blank */ 
    result = result*mul + arr[i]; 
    } 
    return result; 
} 

第二for是做什麼我解釋;其餘的代碼應該很自我解釋。請注意,雖然這很容易溢出。您可能需要將其更改爲使用無符號整數,但如果您混淆了大數組或具有非常大整數的數組,則這很容易溢出。

1

您想轉換positional notation中給出的數字。爲此,你需要數字和底座。特別是必須提供基地,因爲否則可能有不同的解釋。考慮例如11。在不知道基地的情況下,不清楚這是十一(基數10)還是三(基數2)甚至十七(基數16)。所以基地必須明確提供。給定基數和數字,對於每個數字,您到目前爲止將結果乘以基數並添加數字。對於二進制,基數爲2,這個乘以2與您提到的左移相同。這裏是Python中的一個例子:

def convert_number(digits, base): 
    result = 0 
    for x in digits: 
     result = result * base + x 
    return result 

print(convert_number([1, 1, 0, 1], 2)) #13 
print(convert_number([1, 1, 0, 1], 10)) #1101 
print(convert_number([1, 1, 0, 1], 16)) #4353