1. 程式人生 > >集合Gk表示這樣一堆數字,該集合內的數字有k個1

集合Gk表示這樣一堆數字,該集合內的數字有k個1

G1 個數 code return tdi index can num while

問題描述

集合Gk表示這樣一堆數字,該集合內的數字有k個1。比如,G1 = { 1, 10, 100, 1000, ...} G2 = {11, 110, 1110 }, ... , Gk { ... }
給定一個數字,找出該數屬於哪一個集合,並且返回該數在集合中的下標。

輸入:6 = 110
輸出:2  

代碼實例

#include <stdio.h>
#include <limits.h>

long rankInGk(long n)
{
        long index = -1;
        long num1 = 0;
        
                long
np = n; while(np) { num1++; np = np & (np - 1); } printf("%ld\n", num1); long i; for (i = 0; i < LONG_MAX; i++) { long numm1 = 0; long icp = i; while (icp) { numm1++; icp = icp & (icp - 1
); } if (numm1 == num1) { index++; if (i == n){ return index; } } } return index; } int main(int argc, char *argv[]) { long res; long _n; scanf("%ld", &_n); res = rankInGk(_n); printf("res:%ld
\n", res); return 0; }

集合Gk表示這樣一堆數字,該集合內的數字有k個1