整数相除优化

在有些场合,除法比较费资源。如果需要反复使用除法可以用其它方法代替。

size_t divxx(size_t fenzi,size_t fenmu)

{

    /////////////////////

    //分母固定时counter base可以被预先计算替换

    static size_t fenmun=0;

    static int counter =1;

    static vector<size_t> base(counter);

    if (fenmun != fenmu) {

        fenmun = fenmu;

        size_t max = size_t(~0);

        

        while (max /= fenmu) {

            counter++;

        }

        //低位在前

        

        for (size_t i =0; i < counter; i ++) {

            base[i] = pow(fenmu, i+1);

        }

    }

    

    ////////////////////

    

    

    vector<size_t> k(counter+1);

    for (size_t i =0; i < counter; i ++) {

        while ((fenzi >= base[counter-i-1] ) ) {

            fenzi -= base[counter-i-1];

            k[counter-i-1] ++;

        }

    }

   

    size_t res = 0;

    for (size_t i =0; i < counter-1; i ++) {

        while ( (k[counter-i-1] )>0) {

            k[counter-i-1] --;

            res += base[counter-i-2];

        }

    }

    res += k[0];

    return res;

}

有时间再优化优化。

你可能感兴趣的:(知识总结)