Base eight, by hand
Print a number in octal (base 8) without letting printf do the conversion: no %o or %lo anywhere in the program.
Write n as a sum of powers of 8 and the digits fall out: 493 is 7 * 64 + 5 * 8 + 5 * 1, so in octal it is 755. Start at the largest power of 8 that fits in n. Divide n by it: the quotient is the next digit, and the remainder carries on to the next power down. Stop after the power 1.
The starter reads n and prints the start of the line (493 in octal is ). You print the digits, one printf with fmt_digit each, and the starter ends the line. Print no leading zeros, but 0 itself prints as 0.
A negative n prints the way %lo would print it: the octal digits of the 64 bits the machine actually stores for it (its two's complement pattern), so -1 comes out as 1777777777777777777777. That means treating n's bits as unsigned throughout: udiv rather than sdiv, and when you compare two such values, the unsigned conditions b.lo, b.ls, b.hi and b.hs, not their signed partners.
Hint: to find the starting power, compare it with n / 8 rather than comparing power * 8 with n. Near the top of the 64-bit range, power * 8 no longer fits.
What is checked
- with the input
493the program prints493 in octal is 755and returns 0 - no
%o-style format string appears in the program - the checker also tries values you do not see: 0, exact powers of 8, the largest 64-bit number, and negatives
specification
%o%lo%lloWe run your program on the input above and on the hidden ones, and compare what it does. Nothing is matched against a stored solution.