Take the 2-minute tour ×
Mathematics Stack Exchange is a question and answer site for people studying math at any level and professionals in related fields. It's 100% free, no registration required.

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.

share|improve this question
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

1 Answer 1

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...!)

share|improve this answer
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 at 13:22

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.