文章
13
粉丝
0
获赞
3
访问
402
#include <stdio.h>
#include <math.h>
#define maxsize 100
int main()
{
int x,temp,remainder;
while (scanf("%d",&x)!=EOF)
{
int i=0,j=0,len,result[maxsize]={0};
temp=x;
if (x==0)
{
printf("%d",0);
}
while(temp!=0)
{
remainder=temp%(-2);
temp=temp/(-2);
if (remainder==-1)
{
&nbs...
登录后发布评论
1.已知某数=以-2为基数的展开式,如-3=1*(-2)^3+1*(-2)^2+0*(-2)^1+1*(-2)^0,反过来求其负二进制
2.类似于二进制的转换,每次除以-2得到商和余数,由于除数为负数的余数是负数且仅可能是-1或0,因此需要对余数进行调整,于是余数为-1时余数+2,同时由于除数=商*(-2)+余数,为保持除数不变,商也应该加1
3.计算过程:-3/-2-->商为1,余数为-1,需调整:商+1=2,余数+2=1,商不为零,继续;
2/-2-->商为-1,余数为0,不调整,商不为零,继续;
-1/-2-->商为0,余数为-1,需调整:商+1=1,余数+2=1,商不为零,继续;
1/-2-->商为0,余数为1,商为零,结束运算
4.注意特例,除数为0时输出0