文章

13

粉丝

0

获赞

3

访问

402

头像
负二进制 题解:
P1097
发布于2026年5月22日 09:51
阅读数 28

#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 条评论
yngshq
2026年5月22日 10:04

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

赞(1)
回复给: