📌  相关文章
📜  国际空间研究组织 | ISRO CS 2016 |问题 39(1)

📅  最后修改于: 2023-12-03 15:23:04.016000             🧑  作者: Mango

国际空间研究组织 | ISRO CS 2016 |问题 39

问题描述

有一个N位的数字,我们需要将它转化为2进制,并统计其中1的个数。编写程序,输出转化后1的个数。

输入格式
  • 第一行包含一个整数T,表示有T组测试数据。
  • 对于每组测试数据,输入一个正整数N。
输出格式
  • 对于每组测试数据,输出一个整数,表示N转化为2进制后1的个数。
示例

输入:

2
2
8

输出:

1
1
思路分析

这道题的关键在于如何将一个十进制的数字转化为二进制,并且统计其中1的个数。首先我们可以使用位运算符来将十进制转化为二进制,具体操作为:

  • 将十进制n与1进行按位与运算,得到的结果为:
    • 如果n的二进制最后一位为1,结果为1
    • 如果n的二进制最后一位为0,结果为0
  • 将n右移一位,将上一步的运算结果插入到二进制数的最前面,即可得到二进制表示的结果。

接下来我们可以根据上一步转化后得到的二进制数, 统计其中1的个数。

解决方案
def binaryOnes(n: int):
    count = 0
    while (n)):
        count += n & 1
        n >>= 1
    return count


if __name__ == '__main__':
    t = int(input())
    answers = []
    for i in range(t):
        n = int(input())
        answers.append(binaryOnes(n))
    for answer in answers:
        print(answer)
总结

这道题的难点在于十进制与二进制的转化以及对二进制数中1的个数的计数。我们可以使用位运算符来解决这个问题,将十进制n不断右移,通过与1进行按位与运算得到其二进制最后一位。接下来我们可以通过根据得到的二进制数统计其中1的位数即可。