If you can't use an external bignum library, then you have to implement your own.
Start by defining what your big number will look like in memory. For example, for rational numbers (which are the most awesome) a number might be represented as "a/b*(2**e)"; and you might have a variable sized array of unsigned bytes to represent a denominator, a variable length array of unsigned bytes to represent a divisor, a variable length array of unsigned bytes to represent an exponent, and some flags (e.g. denominator sign and exponent sign).
The next step is to write code to do primitive operations on pieces of your big number. For example, code to add variable length arrays together, code to shift a variable length array left/right, code to multiply 2 variable length arrays, etc.
The next step would be to implement normal operations using your primitive operations. For example (for the rational numbers), "bigNumber << 44" is actually "a/b*(2**e) << 44", and you'd just add 44 to "e".
The next step is to convert your number into your format using those normal operations you implemented. For example, you might create a big number that has the value 1 (denominator=1, divisor=1, exponent=0) and then shift it left by 200000 (denominator=1, divisor=1, exponent=0+200000).
Of course then you need some way of converting your big number into a string so it can be displayed. This requires actual division (rather than "multiply by inverse") which gets tricky.
Please note that for your purposes you only actually need a "0 bit" significand and an 18-bit exponent to store the number (in a format designed specifically for that number). If you don't need to display the resulting number in decimal, then it becomes very easy.
For example, to display it in hex you could do:
char hexDigitTable[16] = "0123456789ABCDEF";
// My big number with a 0-bit significand and 18-bit exponent!
uint32_t exponent = 20000;
printBigNumber(uint32_t exponent) {
int digit;
if(exponent > 4) {
// Note: "number / 16" is the same as "number >> 4" which is
// the same as "exponent - 4".
printBigNumber(exponent - 4);
}
digit = 1 << (exponent & 3);
printf("%c", hexDigitTable[digit]);
}
See how easy it is if you're lazy? :-)