einen kleinen Fehler seh' ich: das
if (num >= exp)
verhindert nicht nur die Ausgabe führender Nullen, sondern so wie ich das sehe auch jede weitere Null in der Mitte der Zahl.
Die meisten Implemtierungen sehen ungefähr so aus (das hier ist natürlich nicht getestet^^):
void printnum (int n)
{
char tmp[20];
int i = 0;
if (n == 0) printch('0');
else
{
while (n > 0)
{
tmp[i++] = '0' + n % 10;
n = n / 10;
}
while (i-- > 0)
{
printch(tmp[i]);
}
}
}
Und wegen dem printf()... es erleichtert die Ausgabe enorm, und so viel Aufwand ist das auch nicht, zumindest wenn man nur %d und sowas unterstützt und keine zusätzlichen Format-Angaben zwischen % und d.
Aber falls du C++ benutzt, könntest du noch einen Schritt weiter gehen und einen Stream basteln mit überladenem "<<"-Operator und so. Wenn man sich in die Syntax für Operator-Überladungen erstmal herreingefunden hat, sind die wirklichen Routinen sogar einfacher (kein printf, sondern nur eine Überladung für int, einen für uint, etc...).
Aber printf oder stream is wohl Geschmacksfrage
edit: da war jemand schneller mit'm schreiben