poj 3191 The Moronic Cowmpouter
http://poj.org/problem?id=3191 此题的解法基于以下几点: (1) 如果一个数是奇数,那么它的二进制形式的最后一位肯定是1,我们可以去掉此 1,就是(x-1)/-2,进入(2) (2) 如果一个数的最后一位为 0 ,我们可以把这个数右移(可以类比以 2 为基的二进制数的操作)一位,然后它的 二进制的倒数第二个数就成了最后一个,就是 x=x/-2,然后进入(1)迭代,直到变为 0 #include<stdio.h> #include<math.h> int a[40]; int main() { int n,i; while(scanf("%d",&n)!=EOF) { int k=0; if(n==0) { printf("0\n"); continue; } while(n!=0) { if(abs(n)%2!=0) { a[k++]=1; n=(n-1)/(-2); } else { a[k++]=0; n=n/(-2); } } for(i=k-1;i>=0;i--) printf("%d",a[i]); printf("\n"); } }