【发布时间】:2021-09-16 04:12:41
【问题描述】:
您好,我正在尝试使用其他一些附加条件重新创建 atoi,主要计算有多少个符号,如果负数为偶数,则返回正数,否则为负数,脚本工作正常。它应该用 int 类型创建的问题,它将用一些非常大的数字进行测试,例如 19999999999 ,我试图转换它的返回值但愚蠢地忘记它总是会返回它的类型。任何想法 ?谢谢
#include <stdio.h>
int ft_checksign(char *str)
{
int i;
int sign;
sign = 0;
i = 0;
while (*(str + i))
{
if (*(str + i) == '-')
sign += 1;
i++;
}
return (sign);
}
int ft_atoi(char *str)
{
long long result;
int i;
i = 0;
result = 0;
while ((*(str + i) >= 9 && *(str + i) <= 32)
|| *(str + i) == '-' || *(str + i) == '+')
i++;
while (*(str + i) && (*(str + i) >= '0' && *(str + i) <= '9'))
{
result *= 10;
result += (long long)str[i] - '0';
i++;
}
if (ft_checksign(str) % 2 == 1)
return ((long long)-result);
else
return ((long long)result);
}
int main()
{
printf("%i", ft_atoi("19999999999"));
return 0;
}
输出
-1474836481
【问题讨论】:
-
您似乎在问如何将值作为 int 返回,其中该值大于 int 可以容纳的值。那是不可能的。如果这不是问题,那么请澄清。例如,您可以更改函数的返回类型(但它当然不会是
atoi)——这是否可以接受? -
这正是我的任务,使 atoa big-numbers proof ,我不知道这是不可能的,只要提出问题
-
要么你误解了要求,要么你被要求做一些不可能的事情(我猜是前者)。
-
“愚蠢地它总是返回它的类型” - ???这并不愚蠢,这就是类型的工作方式。如果您希望它返回不同的类型,则将该类型作为返回类型!