title: What do I do when a Long isn't long enough (Java)?
body: <p>So, I'm working through the bottom of Project Euler.  There are a lot of great problems there (most of which are way above my level).  But I very quickly came across a major problem: </p>
  
  <p>Java will not do huge numbers.</p>
  
  <p>Now, if I had the ability to make fast programs taking alternative routes, this would not be a problem for me.  Unfortunately, I am not that person.</p>
  
  <p>Take, for example, Problem 20.  It call to find the digit sum of 100!  I wasn't even writing for the digit parsing, but just my code to find the factorial failed.</p>
  
  <pre><code>long onehfact = 1;
  for(int i = 1; i &lt;= 100; i++){
      onehfact = onehfact * i;
      System.out.println(onehfact);
  }
  </code></pre>
  
  <p>This worked for about 20 sequences, but started giving random-ish 19 digit numbers.  By 75 sequences, it was just giving me zero.</p>
  
  <p><code>100!</code> is definitely not zero.</p>
  
  <p>I need a way to have incredibly large numbers, and scientific notation will not work for my purposes.  Is there a large variable type that I could use, that can hold numbers as large as 100-150 digits?  Is there any other solution that would have the same result?</p>