ACM入门-ZOJ 1383 Binary Numbers 二进制数

题目来自ZOJ 1383 链接

题目

Given a positive integer n, print out the positions of all 1’s in its binary representation. The position of the least significant bit is 0.
Example
The positions of 1’s in the binary representation of 13 are 0, 2, 3.
Task
Write a program which for each data set:reads a positive integer n,computes the positions of 1’s in the binary representation of n,writes the result.
Input
The first line of the input contains exactly one positive integer d equal to the number of data sets, 1 <= d <= 10. The data sets follow.
Each data set consists of exactly one line containing exactly one integer n, 1 <= n <= 10^6.
Output
The output should consists of exactly d lines, one line for each data set.
Line i, 1 <= i <= d, should contain increasing sequence of integers separated by single spaces - the positions of 1’s in the binary representation of the i-th input number.
Sample Input
1
13
Sample Output
0 2 3

分析

  • 输入:一个数字d代表接下来输入的数字个数。1 <= d <= 10,接下来的d行每行输入一个数字n, 1 <= n <= 10^6
  • 输出:每个数字的二进制形式中的1的位置,位置计算从0开始。
  • 计算方法:传统方法将一个数字转换成二进制,就是除2余2的一个循环过程,遇到1则输出这时的位置,即迭代次数。
  • 难点:思路不难,输出格式需要注意最后一位后没有空格。

代码

#include <iostream>
using namespace std;

int main()
{
    int d;
    cin >> d;
    int num;
    int pos = 0;
    for (int i = 0; i < d; i++)
    {
        pos = 0;
        cin >> num;
        while (num!=0)
        {
            if (num % 2 == 1)
            {
                cout << pos;
                if (num / 2 != 0)cout << " ";
            }
            num = num / 2;
            pos++;
        }
        cout << endl;
    }
    return 0;
}
上一篇:Zoj 4063(构造题 思维题)


下一篇:ZOJ 1217 Eight(单向BFS+map)