c++怎么把一个十进制数转换成二进制,并计算二进制数最长连续1和0的长度

1个回答

  • 很简单.如果这个十进制数的值在 C/C++ 语言本身所支持的范围内,如 char,short,int,long 之类,只需循环 N 次就能得到二进制值.这里的 N 等于数据类型的位数,如 char=8,short=16,int=32,long=32.转换的方法就是直接判断数据的每一位,示例代码(假定要转换一个值在0~4294967295之间的无符号长整型数)如下:

    #include

    #include

    //参数 value 是要转换的数,len1 是要返回的连续1的最大长度,

    //len0 是要返回的连续0的最大长度

    void BinaryPrint( unsigned long value,int * len1,int * len0 )

    {

    int i,max0,max1;

    *len1 = 0;

    *len0 = 0;

    max0 = 0;

    max1 = 0;

    //由于要转换的数值,也就是参数 value 是无符号长整型,占32位,

    //所以循环32次

    for( i=0; i> i) )

    { //遇到为1的位

    if( max0 )

    { //且之前记下的连续0长度不为0

    //保存连续0的最大长度

    if( max0 > *len0 ) *len0 = max0;

    max0 = 0;

    max1 = 1;

    }

    else

    {

    max1++;

    }

    printf( "1" );

    }

    else

    {

    if( max1 )

    { //且之前记下的连续1长度不为0

    //保存连续1的最大长度

    if( max1 > *len1 ) *len1 = max1;

    max1 = 0;

    max0 = 1;

    }

    else

    {

    max0++;

    }

    printf( "0" );

    }

    }

    printf( "n" );

    }

    #define __DO_TEST__ 1

    #if __DO_TEST__

    int main( int argc,char ** argv )

    {

    int max0,max1;

    unsigned long val = 1234567890; //测试值,请任意修改

    printf( "value = %lu:",val );

    BinaryPrint( val,&max1,&max0 );

    printf( "max0 = %d,max1= %dn",max0,max1 );

    }

    #endif