【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);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值