李sir_Blog

博客园 首页 联系 订阅 管理

把二进制数当成数组进行左移运算的,没隔四位要输出一个空格,我在这里看到此题:
一个给定的数值由左边开始升位到右边第N位,如
0010<<1 == 0100
或者
0001 0011<<4 == 0011 0000
请用C或者C++或者其他X86上能运行的程序实现。
题目要求是可以对带格式的(4位一空格)二进制数进行位操作。

接收带有空格的输入可以用cin.getline()函数,要求一个字符数组作为参数,以及最多能接收的长度和以及一个表示结尾的字符。此题没有什么特别之处,就是记住在输出的时候每四位一个空格,并且要忽略输入行中的空格。我的算法复杂度为O(n):

#i nclude <iostream> 
using namespace std;

void Convert(char* input,int num)
{

    int j=0;
    for(int i=num+num/4;input[i]!='\0';i++)
    {

        if(input[i]==' ')
            continue;
        cout
<<input[i];
        if(++j%4==0)
            cout
<<" ";
    }

    for(int i=0;i<num;i++)
    {
        cout
<<"0";
        if((++j%4==0)&&(i<num-1))
            cout
<<" ";
    }
}


int main()
{

    char input[100];
    cout
<<"input string:";
    cin.getline(input,
100,'\n');
    int num;
    cout
<<"input number:";
    cin
>>num;
    Convert(input,num);
    getchar();
    getchar();

    return 0;
}

 

posted on 2011-01-16 19:55  李sir  阅读(880)  评论(1编辑  收藏  举报