# Algorithms

 View All Threads First Prev Next
 The six rightmost non-zero digits of 1000000! Rod Gowdy 2-Jul-08 4:50
 The last six non-zero digits of 1,000,000! are 412544. Please, keep your money.   I wrote this code to calculate your answer: ```// Calculate the least significant (non-zero) digits of large factorials. // By Robert C. Cartaino // Posted via http://www.codeproject.com // 02-July-2008 using System;   class Program { const ulong Target = 1000000; // This is the number you are trying to find the factorial of. const ulong RoundOff = 10000000000; // This rounds off the answer so the intermediate results don't overflow. static void Main(string[] args) { ulong factorial = 1;   // Iterate through all numbers up to 'Target', multiply by each to find the factorial of 'Target'. for (ulong n = 1; n <= Target; n++) { factorial *= n;   // Remove the trailing zeros. while (factorial % 10 == 0) { factorial /= 10; }   // We only need the right-most digits. factorial %= RoundOff;   //Console.WriteLine("{0}! = {1}", n, factorial); }   Console.WriteLine("{0}! (truncated) = {1}", Target, factorial); } }```   Why it works:   When multiplying numbers, the trailing zeros at the end will not change the outcome... so I threw those out.   Also, if you are only interested in the least significant digits, then the upper-most digits will not have an effect on the outcome of the lower digits... so I threw those out.   With all the rounding, I didn't have to worry about overflow so I was able to calculate the "truncated factorials" of very large numbers iteratively.   Enjoy,   Robert C. Cartaino   modified on Wednesday, July 2, 2008 1:26 PM
 Re: The six rightmost non-zero digits of 1000000! Rod Gowdy 3-Jul-08 3:42
 Last Visit: 31-Dec-99 18:00     Last Update: 15-Mar-14 1:10 Refresh 1