For handling big numbers, I'd look at what I think is a good example like Tower of Hero. Top left corner:
(source: mzstatic.com)
Without getting into gameplay, the way it handles numbers is relatively simple: You see two buckets of numbers. As you get higher in the tower, and make more "gold", the two buckets simply represent larger numbers.
120
120M320K - 120 Million
120B631M - 120 Billion
120T134B - 120 Trillion
Once the game passes T it moves into a, b, c... z, aa, ab, ...
56aa608z
Doing it this way, it still lets you know how much gold you've "earned"... while not bogging the game down in details.
Do you really care about Millions when your number is past Trillions?
Does it keep the number in Int, Big Int, Float, Double, Decimal, ...? Custom Array? When you are handling numbers in such a "fuzzy" way, I don't think it matters...
All that that likely matters are the most significant parts - in this case, the first 6... After that, MAYBE the next 3 or 6 - since earning a few hundred K can roll over into Millions - but there gets a point where earning a few hundred K isn't going to affect you when you hit T... much less aa and beyond.
Your mileage will vary (depending on what you want/need)... Just thought I'd put out my 2c on what I think is a good/simple example.
Edit:
Further thoughts on how I would implement the numbering system: I'd have a number with 3 significant parts: XXXX.YYY(...)xZZZ.
X is the most significant digits,
Y trailing
Z the multiplier (multiple of 3).
So 120.365x1 would be 120k365... 120.365x2 would be 120M365K... etc. Hit the 4 leading (1200.365x2), then just rotate the numbers 1.200365(...)x3. Bam. You have 1B200M.
X.Y would fit easily in a Decimal or Float... with Z sitting next to it as an int/unsigned int.
With a float, you'd be able to keep a sizable - but increasingly unimportant - number of digits after the dot.
Z would the easily represent an easily understandable block of numbers:
K = 1
M = 2
B = 3
T = 4
a = 5
...
z = 31 (I may be off on this)
aa = 32
...
az = 58
ba = 59
...
...
double
. If it had been me, I would have used BigInteger, though. \$\endgroup\$