Как сохранять и сокращать ОЧЕНЬ большие числа типа int?
Варианта три:
1. Использовать double - тогда максимум у тебя будет примерно 1e308 (1 с 308 нулями)
2. Хранить число в виде двух чисел - значение и степень десятки Точность на больших числах будет низкая, но предела по сути нет - можно будет хранить числа вплоть 2^64*10^(2^64) (если использовать два long). Эту же методику можно и с double реализовать - получится ~10^308*10^(10^308), что ещё больше
3. Можно попробовать BigInteger - по памяти не эффективно, медленно, но зато точность идеальная.

Чтобы прямо весь код не переписывать - свое "особое" число ты можешь реализовать как структуру со всеми нужными операторами и операторами приведения типов.

Вот пример, без реализации операторов
struct ExponentialInteger
{   
    private readonly int value;
    private readonly int exp;
    
    //.ctor
    // operator +
    // operator -
    // operator *
    // operator /
    // operator implicit
    // operator explicit
    // IEquatable, IComparable, IFormattable
    // итд
    private static string[] suffix = new[]
    {
        "", "K", "M", "t", "q", "Q", "s", "S", "o", "n", "d", "U", "D", "T", "Qt", "Qd", "Sd", "St", "O", "N", "v", "c"
    };

    public override string ToString()
    {
        if (exp >= suffix.Length || exp < 0)
        {
            return $"{value}*10^{exp}";
        }
        else
        {
            return $"{value}{suffix[exp]}";
        }
    }
}

Ну т.е. по сути игрок видит только числа от 0 до 1000, и жалуешься что long не хватает, а тут 10 бит за глаза.
Но если вы так за свой код переживаете, используйте BigInteger