题目链接:https://vjudge.net/problem/POJ-3191
题意:将一个int范围的整数用-2进制表示并输出。
思路:将十进制转换成-2进制,原理也类似于短除法。但不同的是不是简单的取模,因为在复数方面对余数的定义可能造成二义性。假设要转换成a进制(a<0),一般的做法是找到最小的非负整数x,使得当前的数减x能被a整除,这个x就将作为新的最高位写到结果中去,然后当前数减x除以a。直到当前数为0。
AC代码:
#include<cstdio> using namespace std; int n,k; int a[1005]; int main(){ scanf("%d",&n); if(n==0){ printf("0 "); return 0; } while(n){ int tmp=n%2; if(n<0) tmp=-tmp; a[k++]=tmp; n=(n-tmp)/(-2); } for(int i=k-1;i>=0;--i) printf("%d",a[i]); printf(" "); return 0; }