Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
个人思路首先注意到2^(n + 1) = 2^n + 2^n,因此,在这个系统中可以表示任何2的整数冥:如果那一位为正,则只要将该位设成1,其余位为0即可,否则若该位为负的话,则向前找到第一个为正的位,比如pnnnn...,只要将这些位都设成1就行了。 所以解法是将要表示的数字变成2进制,从低位到高位遍历,如果第j位不为0的话,只要在新数字中加上2^j即可,这样根据第j位为正或负以及第j位上的当前数字分为四种情况: 1、正且为0:直接设成1 2、正且为1:设成0,然后在加一个2^(j+1),相当于进位 3、负且为1:直接设成0, 4、负且为0:设成1,并加一个2^(j + 1), 最后某次加的时候发现溢出的话就说明失败。 另外,对于64位的问题,将新数字用int[64]表示,在取原数字第j位时用 (long long)1 << j Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator