一道有趣的面试题


本人认为这是一道挺有趣的题,就放在这里和大家分享,望各位路过大神指点一二。
给定rand1():能够产生random数字0,1 。用rand1()实现
rand3()->0,1,2,3;
rand4()->0,1,2,3,4;
randN(int n)->0,1...,N,

其中n可以是任意整数,包括0,负整数,正整数,注意edge case
已邀请:
    int randN( int n )
    {
        if( n == 0 )
            return 0;
        if( n < 0 )
            return -randN(-n);
    
        int d = 0;
        int n2 = n;
    
        while( n2 > 0 ){
            n2 = n2>>1;
            d++;
        }
    
        int i, x;
    
    
        while(1){
            x = rand1();
            for(i = 0; i < d - 1; i++){
                x <<= 1;
                x = x | rand1();        
            }
            if( x <= n)
                return x;
        }
    }

要回复问题请先登录注册

返回顶部