1. 程式人生 > >-2進位制

-2進位制

http://oj.acm.zstu.edu.cn/JudgeOnline/problem.php?id=4435

懵~ 後來問別人,他讓我試著用二進位制反推十進位制,就曉得了(用(-2)^n)。

這個是學長寫的程式碼  //我寫的時候,將它先變成二進位制,再給每一個奇數位且值為1的陣列的後一位+1,但學長是每得一位就讓後面一位變化,也會繼續影響接下來每一個數 就不用考慮為2得情況了

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 //2^i== (-2)^(i+1)+(-2)^i 
 4 int ans[50
], en; 5 int main() 6 { 7 int t; 8 scanf("%d", &t); 9 while(t--){ 10 int n, k; 11 scanf("%d%d", &n, &k); 12 13 en = 0; 14 while(n){ 15 ans[en] = n & 1; //就是得二進位制的思路 16 n >>= 1; // n/=2 17 if((en & 1
) && (ans[en] & 1) && k == -2) n++; //&1 判斷是否為奇數 //如果滿足條件,就會讓後一位0>1,1>0 18 en++; 19 } 20 if(en){ 21 for(int i = en - 1; i >= 0; --i) printf("%d", ans[i]); 22 puts(""); //換行 23 } 24 else{ 25 puts("
0"); 26 } 27 } 28 return 0; 29 }
View Code