在有些场合,除法比较费资源。如果需要反复使用除法可以用其它方法代替。
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;
}
有时间再优化优化。