In C# you can use decimal
to get up to 29 digits and BigInteger
to get arbitrarily many digits.
However, you'll need a different technique to tell if a 100 digit BigInteger is a perfect square, as there isn't an off-the-shelf "root" function that I'm aware of.