洛谷 P1017 进制转换

本文介绍了洛谷P1017问题中的进制转换,包括从正进制到负进制的转换过程。通过短除法详细解释了如何将一个数转换为二进制,接着探讨了负二进制的转换方法,提供了一个算法步骤,并提醒注意不同编程语言中负数取模的差异。
摘要由CSDN通过智能技术生成

P1017 进制转换

先从正进制开始考虑。

例如二进制:

18=1*2^4+0*2^3+0*2^2+1*2^1+0*2^0=0+2(1+2(0+2(0+2(1))))

k=a[n]*2^n+a[n-1]*2^(n-1)+...+a[0]*2^0=a[0]+2(a[1]+2(...+2(a[n])...)...)

短除法将k转换为二进制就是把k除以二,留下商,记录下余数,然后再对商执行此操作,不断重复直到数变为0,再将所有余数倒序输出,根据此式可看出其原理就是第i次除以二时的余数显然就是a[i-1]。

然后考虑负进制。

如负二进制:

k=a[0]-2(a[1]-2(...-2(a[n])...)...)

根据题意,a[0],a[1],...,a[n] >=0

由此可得出将k转换为负二进制的短除法方法:(开始时i=0)

①寻找一个整数p,使得 -2p≤k 且-2p 在可能的范围内最大,记录下k-(-2p),即为a[i]

②如果p为0则进入下一步,如果不为0则p->k(将p赋值给k),i++,然后回到第①步

③得出答案:n=i,k=a[n]*(-2)^n+a[n-1]*(-2)^(n-1)+...+a[0]*(-2)^0

&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值