在数的对二的补码表示中,我们编写的itoa函数不能处理最大的负数,即n等于-(2的(字长-1)次方-1)的情况。修改该函数,使它在任何机器上运行时都能打印出正确的值。
原因很清楚了,是因为最大负数无法通过语句n=-n反转 超出了最大值
如char n = -128;
n = -n 后n的值为128.
----------------From Answer Book-----------------
##define abs(s) ((x) < 0 ? -(x):(x))
void itoa(int n, char s[])
{
int i, sign;
sign = n;
i = 0;
do
{
s[i++] =abs(n % 10) + '0';
}
while((n /= 10) = 0);
if(sign < 0)
s[i++] = '-';
s[i] = '\0';
reverse(s);
}
1. 用变量sign 保存了n的初值,用宏abs计算n%10 的绝对值。
2. do while()条件语句表达式改为 (n/10)!=0 ,这是为了避免使函数itoa陷入无限循环。
3-4 itoa函数处理最大负数。
最新推荐文章于 2024-09-10 06:15:00 发布