【C程序设计语言第二版】练习3-4:itoa处理最大负数

解题思路

我们观察最初的itoa函数:

void itoa(int n, char s[])
{
	int i, sign;
	if((sign = n) < 0)
		n = -n;
	i = 0;
	do {
		s[i++] = n % 10 + '0';
	} while((n / 10) > 0);
	if(sign < 0) s[i++] = '-';
	s[i] = '\0';
	reverse(s);
}

上述n = -n的操作无法对最大负数起作用,因为c语言中数以补码表示,比如表示范围为-128 ~ 127,这个时候-128无法被n = -n成功操作,这样导致了上述代码无法处理最大负数的问题。

我们可以通过避免使用 n = - n来完成上述操作。

void itoa(int n, char s[])
{
	int sign = n;
	int i = 0;
	do {
		s[i++] = abs(n % 10) + '0'; //避免负数
	} while((n / 10) > 0);
	
	if(sign < 0) s[i++] = '-';
	s[i] = '\0'
	reverse(s);
}
发布了128 篇原创文章 · 获赞 20 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/u011544909/article/details/95892568