我获得了实施itoa
的作业,我的代码不适用于-2147483648
。我怎样才能让它发挥作用?
char *itoa(int nbr)
{
static char rep[] = "0123456789";
static char buff[65];
char *ptr;
int neg;
ptr = &buff[64];
*ptr = '\0';
neg = nbr;
// fails here, turning -2147483648 to int
//2147483648 is bigger than int.
if (nbr < 0)
nbr *= -1;
if (nbr == 0)
*--ptr = rep[nbr % 10];
while (nbr != 0)
{
*--ptr = rep[nbr % 10];
nbr /= 10;
}
if (neg < 0)
*--ptr = '-';
return (ptr);
}
答案 0 :(得分:1)
您正在尝试使用以下代码
将-2147483648转换为2147483648if (nbr < 0)
nbr *= -1;
2147483648不适合您系统上的int
。您可能希望将nbr
转换为可以在执行此操作之前处理更大值的long long
类型。
long long my_positive = nbr;
if (my_positive < 0)
my_positive*= -1;
答案 1 :(得分:0)
正如你的代码内注释所说,这个数字对于int来说太大了。尝试使用long,它具有更大的范围,应该能够存储2147483648。