#include <stdio.h>int main(){puts("转载请注明出处");puts("地址:blog.csdn.net/vmurder/article/details/43636437");}
题解:
发现我们可以保证同时至多出现两个数A和A+1。
然后记录这两个数的数目a、b。
每次向下>>时,
如果A是奇数,那么新的计数器就应该是a,a+b
如果A是偶数,那么新的计数器就应该是a+b,b
时间复杂度log级别
代码:
m=int(raw_input())while m:m=m-1a=int(1)b=int(0)n=int(raw_input())while n:if n%2==1 : b=a+belse : a=a+bn=n/2print(b)
,最好的节约是珍惜时间,最大的浪费是虚度年华。