Говнокод →  Говнокод в Миранде

Вот такая вот реализация функции получения длины номерка UIN в Миранде.

\miranda\miranda\protocols\IcqOscarJ\icq_packet.c, line 206

int __fastcall getUINLen(DWORD dwUin)
{ // TODO: invent something more clever
  if (dwUin >= 1000000000) return 10;
  if (dwUin >= 100000000) return 9;
  if (dwUin >= 10000000) return 8;
  if (dwUin >= 1000000) return 7;
  if (dwUin >= 100000) return 6;
  if (dwUin >= 10000) return 5;
  if (dwUin >= 1000) return 4;
  if (dwUin >= 100) return 3;
  if (dwUin >= 10) return 2;
  return 1;
}


А как бы вы реализовали такую функцию?
2


Вставка изображения
Файл:
Ссылка:
Выравнивание:
Описание:
комментарии(4): 
ekimoff 28 ноября 2009, 12:58 #
0 
return (round(dwUin/10)+1)
dodik 18 декабря 2009, 11:48 #
1 
и что это будет???

dwUin = 20

20 / 10 = 2
2 + 1 = 3

а должно быть 2
seriusohatski 6 июня 2011, 19:09 #
0 
int __fastcall getUINLen(DWORD dwUin)
{ // TODO: invent something more clever
if (dwUin >= 1000000000) {
return 10;
}
else{
return strlen(dwUin);
}
}
katana 10 июня 2011, 00:27 #
0 
самый правильный способ(имхо для положительных) — брать целую часть логарифма по основанию 10 + 1

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста, или зарегистрируйтесь, если не зарегистрированы.