转负二进制
1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 #include <cstdio> 5 #include <vector> 6 #include <cstdlib> 7 #include <iomanip> 8 #include <stdio.h> 9 #include <cmath> 10 #include <ctime> 11 #include <map> 12 #include <set> 13 #include <stack> 14 #include <queue> 15 #include <stdlib.h> 16 using namespace std; 17 #define lowbit(x) (x&(-x)) 18 #define max(x,y) (x>y?x:y) 19 #define min(x,y) (x<y?x:y) 20 #define MAX 100000000000000000 21 #define MOD 1000000007 22 #define pi acos(-1.0) 23 #define ei exp(1) 24 #define PI 3.141592653589793238462 25 #define INF 0x3f3f3f3f3f 26 #define mem(a) (memset(a,0,sizeof(a))) 27 typedef long long ll; 28 ll gcd(ll a,ll b){ 29 return b?gcd(b,a%b):a; 30 } 31 bool cmp(int x,int y) 32 { 33 return x>y; 34 } 35 const int N=10005; 36 const int mod=1e9+7; 37 38 int main(){ 39 int n; 40 cin>>n; 41 stack<int> s; 42 if(n==0){ 43 cout<<0; 44 return 0; 45 } 46 while(n){ 47 if(n%-2<0){ 48 s.push(n%-2+ 2); 49 n=n/-2+1; 50 }else{ 51 s.push(n%-2); 52 n/=-2; 53 } 54 } 55 while(!s.empty()){ 56 cout<<s.top(); 57 s.pop(); 58 } 59 return 0; 60 }
1 //POJ 3191 2 #include<stdio.h> 3 #include<string.h> 4 #include<algorithm> 5 using namespace std; 6 int ans[1000]; 7 int main() 8 { 9 int a; 10 while(~scanf("%d",&a)){ 11 if(a==0){ 12 printf("0\n"); 13 continue; 14 } 15 int cont=0; 16 while(a){ 17 ans[cont++]=abs(a%(-2)); 18 a-=abs(a%(-2)); 19 a/=(-2); 20 } 21 for(int i=cont-1;i>=0;i--) 22 printf("%d",ans[i]); 23 printf("\n"); 24 } 25 return 0; 26 }