【发布时间】:2009-10-02 16:07:01
【问题描述】:
我正在阅读 K&R;到目前为止,我做得很好,但函数itoa() 中有一些我不明白的东西。在itoa() 中,他们说他们自己颠倒了数字。例如 10 是 01(他们反转字符串):
void itoa(int n, char s[])
{
int i, sign;
if ((sign = n) < 0) /* record sign */
n = -n; /* make n positive */
i = 0;
do { /* generate digits in reverse order */
s[i++] = n % 10 + '0'; /* get next digit */
} while ((n /= 10) > 0); /* delete it */
if (sign < 0)
s[i++] = '-';
s[i] = '\0';
reverse(s);
return;
}
我不明白它是如何颠倒数字的。即使我们只是在做n % 10 + '0' 那么它的下一个数字 10 然后 1 被删除然后它变成 0 对吗?还是我不明白它的逻辑?
【问题讨论】:
-
请使用标点符号,避免重复句子。阅读您的问题非常困难。
-
请注意,此代码不能可靠地转换 INT_MIN。
-
@Jonathan 您建议如何以便携方式解释 INT_MIN?谢谢!