ms的一道面试题

把二进制数当成数组进行左移运算的,没隔四位要输出一个空格,我在这里看到此题:
一个给定的数值由左边开始升位到右边第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 ;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值