注册 登录
编程论坛 C++教室

帮忙解决下。。。提交后Compilation Error

wang_7_7 发布于 2010-03-28 14:06, 416 次点击
题目是让你把输入的整数转换成2进制数,输出2进制数中1的位置
比如
13
0 2 3
自己写的代码如下:
#include<iostream>
#include<cmath>
#include<vector>
using namespace std;
int main()
{
    int m;
    long n;
    vector<int> lin;
    cin>>m;
    for(int k=0;k<m;k++)
    {
        cin>>n;
    for(int i=0;i<=15;i++)
    {
        if(pow(2,i)>n)
        {
            lin.push_back(i-1);
            n=n-pow(2,i-1);
            i=0;
        }
        if(pow(2,i)==n)
        {
            lin.push_back(i);
               break;
        }
    }
    for(int j=lin.size()-1;j>=0;j--)
        cout<<lin[j]<<" ";
        cout<<endl;
        lin.clear();
    }
    return 0;
}
多谢了!!!
2 回复
#2
hzh5122010-03-28 14:35
还用得着STL,有点像机关枪打蚊子。
给你个直接的。

/*
题目是让你把输入的整数转换成2进制数,输出2进制数中1的位置
比如
13
0 2 3

*/

#include <stdio.h>

int main(void)
{
    const int iTimes=sizeof(int) * 8;
    int x;
    int iMask=1;
    printf("\nDEC:");
    scanf("%d",&x);
    int x2[iTimes];
    int i;
    for( i=0 ; i<iTimes ; i++ )
    {
        x2[i]=x & iMask;
        iMask = iMask << 1;
    }
    printf("\n(%d)Binary=",x);
    for( i=iTimes -1 ; i >=0 ; i-- )
    {
        printf("%d",x2[i] ? 1 : 0 );
        if(i%4==0)
            printf(" ");
    }
    printf("\n");
    for( i=iTimes -1 ; i >=0 ; i-- )
    {
        if(x2[i])
            printf("%d",i);
    }
    printf("\n");
    return 0;
}

[ 本帖最后由 hzh512 于 2010-3-28 14:46 编辑 ]
#3
wang_7_72010-03-29 12:27
XIEXIE
1