Handling "Big" Integers in C#
If you're only looking at the last four digits, you don't need anything larger than an integer. Consider this:
When multiplying two numbers, if you are only interested in the least significant digits (i.e. the last four digits), then the upper-most digits will not have an effect on lowest digits of the outcome... so you can just "throw out" the most significant (right-side) digits before you multiply.
For example: I want to multiply two large numbers but I only need the last two digits:
int num1 = 123456789;
int num2 = 987654321;
int result = num1 * num2; // Last two digits would be "69" but this OVERFLOWS
but if we multiply only the last two digits...
int result = (num1 % 100) * (num2 % 100); // result = 89 * 21
89 * 21 = 1869 (the last two digits are still "69" but we have not overflowed).
I used this technique to calculate the Six Right-Most Digits of 1,000,000 factorial.
.NET 4.0 has a BigInteger class