# Algorithm to find greatest significant digit of long integer

I'm doing a project euler problem (http://projecteuler.net/problem=40) that requires iteration of each digit of a set of increasing integers, in order.

I solved it by converting each integer to a string and taking the 0 index, but I'd like to know if there's a better, numerical algorithm to find the most significant digit of an arbitrarily long given integer.

Example: Given 3918287712, to easily get both (3) and find the power of 10 (10^10) that corresponds to it. I'd really like pointers to mathematical literature as well - I'm trying to increase my own knowledge of math and algorithms.

-
I do not understand. For example, are you trying to find the most significant digit of $\pi^{100000}$ (which is tough), or you have a predetermined and stored number, and you are trying to find the most significant digit of that. If the question is the latter, then how that number is stored? –  Lord Soth Jul 6 '13 at 17:17
Yes, I have a set of predefined numbers, in this case they're stored in memory as a set of long, signed integers. –  Kylar Jul 7 '13 at 14:32

Arithmetically, the number of digits of a positive integer $N$ is $d=\lfloor \log_{10} N\rfloor + 1$. For example, $\log_{10} 3918287712 \approx 9.5931$, so $3918287712$ has $\lfloor 9.5931\rfloor + 1 = 10$ digits.

Once you know the number of digits $d$ of $N$, you can find the first digit $f$ of $N$ by calculating $f = \lfloor N/10^{d-1} \rfloor$. For example, the first digit of $3918287712$ is $\lfloor 3918287712/10^{10-1} \rfloor = \lfloor 3.918287712 \rfloor = 3$.

(In practice, your string-based method might be faster...!)

-
Excellent! I'll give this a go. Like I said, the making it faster is only one aspect, I also really want to learn. –  Kylar Jul 7 '13 at 14:33
If you start with an integer, converting the number to a string requires the routine doing the conversion to iterate through each of the digits in the number, so you could just do that yourself dividing the number by successive powers of ten until you get a result of zero. If you really want to save time you could use a binary search approach for finding the power of ten of the most significant digit. It depends on the implementation of log10 on your system to determine which solution will be faster. The log10 approach though is more "mathematical" and probably clearer to the reader. –  Bogatyr Nov 23 '14 at 13:22