我的itoa不适合大数字

时间:2016-06-21 13:36:05

标签: c

我获得了实施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);
}

2 个答案:

答案 0 :(得分:1)

您正在尝试使用以下代码

将-2147483648转换为2147483648
if (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。