3 ms·
Since you showed interest, using this as the for loop tweaks it even a bit more :) /* temp number */ char tmp[20]; int pos = 0; int j = i > 0 ? i : -i;
by apaprocki 15y ago
Since you showed interest, using this as the for loop tweaks it even a bit more :)
/* temp number */
char tmp[20];
int pos = 0;
int j = i > 0 ? i : -i;
do {
tmp[pos++] = '0' + j % 10;
j /= 10;
} while (j != 0 && pos <= 20);
/* output both numbers simultaneously */
char x[44], *p1 = x, *p2 = x + 1 + pos;
if (i < 0) { *p1++ = '-'; *p2++ = '-'; }
do {
int tpos = --pos;
*p1++ = tmp[tpos]; *p2++ = tmp[tpos];
} while (pos > 0);
*p1 = ' ';
*p2 = '\0';
- 1amzave 15y agoWell, if you really want to go apples-to-oranges and specialize as much as possible for the sequentially increasing case we're dealing with here, you could just do your arithmetic directly on the ASCII string itself, complete with a little ripple-carry loop...I bet that'd be fast. If I'm remembering correctly, I think x86 actually has dedicated instructions for ASCII arithmetic (though they're probably so unoptimized in a modern microarchitecture it'd probably be faster to avoid them).