28 EYLÜL 2009, PAZARTESİ
Bir tamsayı verimli şekilde basamak sayısını belirlemek için
Bir çok şeyverimlikaç C bir tam sayı vardır belirleme şeklini ?
CEVAP
28 EYLÜL 2009, PAZARTESİ
Peki, en verimli şekilde, tamsayı boyutunu biliyor musun küstah, bir arama olacaktır. Daha hızlı daha kısa logaritma tabanlı yaklaşım olmalıdır. Eğer sayma '-', 1 çıkarın. umurunda eğer.
// generic solution
template <class T>
int numDigits(T number)
{
int digits = 0;
if (number < 0) digits = 1; // remove this line if '-' counts as a digit
while (number) {
number /= 10;
digits ;
}
return digits;
}
// partial specialization optimization for 32-bit numbers
template<>
int numDigits(int32_t x)
{
if (x == MIN_INT) return 10 1;
if (x < 0) return numDigits(-x) 1;
if (x >= 10000) {
if (x >= 10000000) {
if (x >= 100000000) {
if (x >= 1000000000)
return 10;
return 9;
}
return 8;
}
if (x >= 100000) {
if (x >= 1000000)
return 7;
return 6;
}
return 5;
}
if (x >= 100) {
if (x >= 1000)
return 4;
return 3;
}
if (x >= 10)
return 2;
return 1;
}
// partial-specialization optimization for 8-bit numbers
template <>
int numDigits(char n)
{
// if you have the time, replace this with a static initialization to avoid
// the initial overhead & unnecessary branch
static char x[256] = {0};
if (x[0] == 0) {
for (char c = 1; c != 0; c )
x[c] = numDigits((int32_t)c);
x[0] = 1;
}
return x[n];
}
Bunu Paylaş:
Bir tamsayı'in kare kökü belirlem...
Nasıl verimli bir şekilde anahtarları/...
Nasıl 32-bit bir tamsayı kümesi bit sa...
Hızlı eğer bir tam sayı iki tamsayı (d...
En verimli şekilde sıfır JavaScript di...