A Simple Problem

题面描述:
求 0~n 中有多少个整数 k 满足(2 * k) XOR (3 * k) == k, 其中 XOR 为异或操作。
输入数据:
输入数据的第一行为一个正整数 T(T<=30),表示测试数据的组数。
接下来的 T 行中,每行为一组测试数据,包含一个正整数 n(n<=1000000000)。
输出数据:
对每一组输入数据,输出一行结果“Case #id: M”,表示第 id 组数据的结果是 M,
id 从 1 开始。
样例输入:
5
0
1
2
3
4
样例输出:
Case #1: 1
Case #2: 2
Case #3: 3
Case #4: 3
Case #5: 4

def process(n):
    n = n+1
    l = 0
    s = []
    while(n):
        tempn = n%2
        s.append(tempn)
        n = n//2
        l += 1
    ans = 0
    pre = -1
    while(l):
        l -= 1
        temp = s[l]
        if temp == 1:
            ans += c[l][0] + c[l][1]
        if (temp == 1 and pre == 1):
            break
        pre = temp
    return ans
anout = []
ntemp = []
c = [[0 for col in range(2)] for row in range(50)]
c[0][0] = 1
c[1][1] = 1
c[1][0] = 1
for i in range(1,49):
    c[i + 1][1] += c[i][0]
    c[i + 1][0] += c[i][1] + c[i][0]
T = int(input())
for t in range(T):
    n_temp = int(input())
    ntemp.append(n_temp)
for t in range(T):
    anout.append("Case #{}: {}".format(t+1,process(int(ntemp[t]))))
for i in anout:
    print(i)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值