1. 程式人生 > 實用技巧 >題解-負進位制

題解-負進位制

負進位制

藉助於對數字理論的研究,奶牛們打算建立一套計數系統。它們打算建立的計數系統是二進位制的,但基數為-2,而
不是+2。另它們非常高興的是,使用-2作為基數表示數字不需要符號位。我們知道進位制數每位的權(從右到左)分
別為1(基數的0次方),基數1,基數2,等等。基數為-2的情況下,每位的權分別為1,-2,4,-8,16,-32,
……(從右向左)。因此,從1開始計數依次為:1, 110, 111, 100, 101, 11010, 11011, 11000, 11001
, 等等。令人驚奇的是,使用基數-2,負數也可以用1和0來表示,而且不需要符號位。例如,從-1開始向下計數
依次為:11, 10,1101, 1100, 1111, 等等。請你幫助奶牛轉換普通十進位制數(範圍-2,000,000,000…2,000,0
00,000)到基數為-2的計數系統。

輸入
Line 1: 一個需要轉換的十進位制整數

輸出
Line 1: 一個整數,表示輸入整數轉換為基數為-2後的結果。
輸入0,仍然輸出一個0。

樣例
輸入
-13
輸出
110111
提示
從右向左讀: 11 + 1-2 + 14 + 0-8 +116 + 1-32 = -13


 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 long long sum=0,s[10000],x=0,n;
 4 int main(){
 5     cin>>n;
 6     if(n==0)cout<<0;
 7     else
 8     for
(int i=1;i<=2000000;i++){ 9 if(n!=0){ 10 sum++; 11 s[sum]=abs(n%(-2));//絕對值 12 if(n%(-2)==-1){// 13 n=n/-2+1; 14 }else{// 15 n/=-2; 16 } 17 }else{ 18 break; 19 } 20 } 21 for
(int i=sum;i>=1;i--){ 22 if(x!=0)cout<<s[i]; 23 if(!x){ 24 if(s[i]!=0){ 25 x=1; 26 cout<<s[i]; 27 } 28 } 29 } 30 return 0; 31 }