2014-01-25 82 views
1

您可能熟悉有符號整數的二進制補碼錶示。這是今天最廣泛使用的二進制整數表示。少數人知道的是一些其他二進制整數表示方法,包括基數-2。基-2分享了二進制補碼的算術方便性,可能更容易描述。 (見http://en.wikipedia.org/wiki/Signed_number_representations將二進制補碼轉換爲十進制

舉例:1011是1 *( - 2)^ 3 + 0 *( - 2)^ 2 + 1 *( - 2)^ 1 + 1 *( - 2)* 0 = - 8 + 0 + -2 + 1 = -9

輸入

第一個數T(從1到100)是從鹼轉化整數的個數-2至基座10

的接下來的T號碼是基數-2號碼(每個1到15位數字)。

注意:數字可以用0填充在左側。

輸出

輸出數字的帶符號的基數10表示法,用空格分隔。


以下是我在C++中的代碼;它幾乎只是在上面的例子中使用了1011的方法。它在我自己的測試用例中運行良好,但是當我將它提交給在線裁判時,它給出了錯誤的答案。我認爲這可能會溢出。任何關於如何改進我的代碼的建議。謝謝!

#include<iostream> 
#include<math.h> 
using namespace std; 
long long int convert (long long int base, long long int num){ 
long long int exp=0; 
long long int output=0; 
while (num != 0){ 
    long long int digit = num - 10*int(num/10); 
    output += digit * pow(base, exp); 
    exp++; 
    num = int(num/10); 


} 
return output; 
} 
int main(){ 
int cases; 
cin >> cases; 
long long int input; 
long long int base = -2; 
cin >> input; 
cout << convert(base, input); 
for (int i=1; i< cases; i++){ 
    cin >> input; 
    cout << " " << convert(base, input); 
} 

return 0; 
} 

回答

2

數字是一個抽象概念,可用手指表示(例如)。

算術指令以不同的方式表示抽象數字,稱爲編號系統。

所以一個數字可以映射到一串數字或一串數字,如果你更喜歡它。

函數轉換你的定義,需要一個數字和一個基數,並將其轉換爲數字。所以它不會將該數字表示爲一個數字序列。

+0

喬治:我不明白。我應該將輸入從基數-2轉換爲基數10.打印出數字(以10爲底)有什麼問題? – user3213711

+0

可能是我沒明白什麼是需要的。你能解釋一下你有什麼輸入和你需要什麼輸出嗎? –

+0

@George:這是一個自動判斷的編程練習。除了問題的描述之外,你不知道輸入是什麼。你的程序可以在你不控制的某臺機器上運行。 –

2

所以你說最好的認爲這是閱讀的問題:

「的第一個數字T(從1到100)是整數的數量從基地-2轉化基地10」。 看來這裏有一些整數轉換。 「

」下一個T數字是基數-2數字。「

所以有T個數字應該在-2的基礎上解釋。

「他們每個人都有1到15個數字。」

「注:數字可能在左邊以0補齊」

「輸出

輸出的數字的簽字基座10表示,由空格隔開。」

所以你有T有價值。比如說那是34。 Ater,你有34個基數-2。 他們每個人都有1到15位數字。這些可能被填充在左邊的0.

所以你必須選擇每個數字的表示(它會是一個字符串?)。

您必須將以基數-2表示的34個數字轉換爲基數10並用空格分隔34個數字。

相關問題