您可能熟悉有符號整數的二進制補碼錶示。這是今天最廣泛使用的二進制整數表示。少數人知道的是一些其他二進制整數表示方法,包括基數-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轉換爲基數10.打印出數字(以10爲底)有什麼問題? – user3213711
可能是我沒明白什麼是需要的。你能解釋一下你有什麼輸入和你需要什麼輸出嗎? –
@George:這是一個自動判斷的編程練習。除了問題的描述之外,你不知道輸入是什麼。你的程序可以在你不控制的某臺機器上運行。 –