输入一个10进制正整数(小于等于10^6),让你把它转换成2进制。
输入
第一行一个整数d(1<=d<=10),表示测试数据个数
以下d行,每行一个10进制正整数。
输出
d行对应每个测试数据,把转换成的2进制数中哪一位是1的位数输出,按升序排列。(比如说13转化成2进制为1101,它的第3位是1,第2位是1,第一位是0,第0位是1,所以输出 0 2 3)
注意要有空格!
Sample Input
1
13
Sample Output
0 2 3
输入一个10进制正整数(小于等于10^6),让你把它转换成2进制。 输入 第一行一个整数d(1<=d<=10),表示测
答案:5 悬赏:0 手机版
解决时间 2021-01-28 19:03
- 提问者网友:你挡着我发光了
- 2021-01-28 02:14
最佳答案
- 五星知识达人网友:人類模型
- 2021-01-28 03:41
#include <iostream>
using namespace std;
int main() {
int n,m;
while(cin >> n) {//n组数据
for(int i = 0; i < n; i++) {
cin >> m;
int bit,cnt = 0;
while(m) {
bit = m%2;
if(bit == 1) //判断是否为1
cout <<cnt;
cnt++;
m/=2;
if(m != 0 && bit == 1)
cout << " ";
bit = 0;//控制空格的输出
}
cout << endl;
}
}
return 0;
}
using namespace std;
int main() {
int n,m;
while(cin >> n) {//n组数据
for(int i = 0; i < n; i++) {
cin >> m;
int bit,cnt = 0;
while(m) {
bit = m%2;
if(bit == 1) //判断是否为1
cout <<cnt;
cnt++;
m/=2;
if(m != 0 && bit == 1)
cout << " ";
bit = 0;//控制空格的输出
}
cout << endl;
}
}
return 0;
}
全部回答
- 1楼网友:患得患失的劫
- 2021-01-28 07:20
1
- 2楼网友:掌灯师
- 2021-01-28 06:46
提供一个思路给你吧。
十进制正整数转2进制是除2取余。
比如:20转2进为:
20/2 0
10/2 0
5/2 1
2/2 0
1 1
即20的2进制为:10100(2^4+2^2=20);你可以根据这个思路来。
- 3楼网友:拾荒鲤
- 2021-01-28 06:14
可以用联合来做啊。。。配合字段结构就行了。
struct A
{
unsigned short b0:1,b1:1,b2:1,b3:1,b4:1,b5:1,b6:1,b7:1,b8:1,
b9:1,b10:1,b11:1,b12:1,b13:1,b14:1,b15:1;
}
union{
unsigned long int x;
struct A y;
}
使用的时候先对x进行赋值,然后依次取用字段结构的各个元素就行了
- 4楼网友:傲气稳了全场
- 2021-01-28 05:05
可以用联合来做啊。。。配合字段结构就行了。
struct A
{
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯