输入一个数计算其二进制中连续1的个数 ...

输入一个数,计算其对应二进制中,连续1的最长的个数
如:
9 = 1001
15 = 1111
其最长连续1的个数分别为1和4
代码:

//  example:
//          input  31
//          output 5
//

#include
#include"gmp.h"
using namespace std;
int main()
{

    int max = 0;
    int min = 0;
    mpz_t remain;
    mpz_t quotient;
    mpz_t num;
        mpz_t divisor;
    mpz_init_set_str(remain,"0",10);
    mpz_init_set_str(num,"0",10);
    mpz_init_set_str(divisor,"2",10);
    for(;;)
    {
        gmp_scanf("%Zd",num);
        min = 0;
            max =0;
        mpz_init_set_str(quotient,"1",10);
        for(;mpz_cmp_ui(quotient,0);)
        {
            mpz_fdiv_qr(quotient,remain,num,divisor);// quotient remain num divisor          num = quotient * divisor + remain
            gmp_printf("%Zd",remain);
            if(mpz_cmp_ui(remain,0))
            {
                min ++;
            }
            else
            {
                if(min >= max)
                {        
                    max = min;  
                }
                min = 0;
            }
            mpz_set(num,quotient);
        }
    cout<min > max ? min : max)<return 0;
}

运行结果:

21321353245234672345234523762345234523462345
1001001101011001111000010010100111101100100001100101010001110001110000011001111000111010000000010011001000 11111101000110110010111000001100101111
6
连续最长1的个数为6

源码

其中用到了gmp库中的一些函数,这样做之后,对输入数的大小,几乎没有任何限制

关于更多GMP库的内容点击下面链接

Linux gmp类库的简单使用(一)

转载于:https://www.cnblogs.com/tolic/p/7142246.html

你可能感兴趣的:(输入一个数计算其二进制中连续1的个数 ...)