Portál AbcLinuxu, 21. května 2025 13:19
Cupiditate sit voluptatibus architecto minus voluptatem quia et in. Facere repellendus natus ullam sunt eius non. Tempore inventore et nihil alias. Possimus sequi voluptates repellat odio quia suscipit dolores. Et nihil nihil dolore nemo harum qui quidem excepturi. Sit ut ipsa eum.
Tiskni
Sdílej:
strlen(num)
' zase o tolik delší nepřipadá…
Logaritmus je první, co člověka napadne, ale to naráží na zaokrouhlovací chyby.
Tu druhou myšlenku bych realizoval spíš tak, že bych šel nejdřív po 10^(2^k) a pak bych půlil interval. Ale když vezmu v úvahu, jaký je maximální počet desítkových číslic pro používané celočíselné typy, vychází mi, že nestojí za to vymýšlet nic přehnaně sofistikovaného.
Ale když vezmu v úvahu, jaký je maximální počet desítkových číslic pro používané celočíselné typy, vychází mi, že nestojí za to vymýšlet nic přehnaně sofistikovaného.
Třeba v Pythonu je omezen velikostí paměti. Na těchto dvou gigabajtech by to mohlo být už krapet zajímavé.
Logické řešení spočívá v cyklickém celočíselném dělení dotyčného čísla desítkou a zaznamenávání počtu iterací.Ne, logické řešení spočívá ve výpočtu logaritmu a vhodném použití jeho celočíselné části, třeba takhle, i když je to hnusné (jen rychlý nástřel):
1+(long)(log(0.5+atol(cislo))/M_LN10)
. Kdyby na vstupu byl řetězec s číslicemi, tak prosím, ale o tom nebyla řeč. atol()
tam nemá co dělat, předpokládám, že už na vstupu je číslo. void main (int argc, char *argv[]) { printf("%d\n", argc > 1 ? strlen(argv[1]) : 0); }
$ perl -e '$_ = 1111; print y///c;' 4
def pocet_znaku(n): r = 1 while n > 9: c = 1 q = 10 while q * q < n: q = q * q c *= 2 r += c n /= q return r
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.