负数进制和正数进制类似。对于负数进制,每次取的余数保证在0~-m-1之间。(例如m=-16,则余数应该在0~15)就可以直接输出。 所以用系统的“mod”运算符的时候必须注意检查是不是在该范围(可能在m+1~0),否则就调整。调整的方法是:
if 余数<0 then
begin
余数=余数-m;
商=商+1;
end;
#include "iostream"
#include "cstring"
#include "cstdlib"
#include "cstdio"
#define N 100000
using namespace std;
int n;
int sk[N],tp;
int main(){
scanf("%d",&n);
while(n){
int k=n%-2;
int t=n/-2;
if (k<0){
k+=2;
t++;
}
n=t;
sk[++tp]=k;
}
for (int i=tp;i>=1;i--)
printf("%d",sk[i]);
if (tp==0) printf("0");
puts("");
return 0;
}