gpt4 book ai didi

c - C 中的递归函数 - 无法处理大输入 [计数零]

转载 作者:行者123 更新时间:2023-11-30 20:10:18 25 4
gpt4 key购买 nike

我正在尝试学习如何用 C 语言编写递归函数,并且我编写了这个函数来计算指定正数中零的数量,作为练习。但是,它只能处理最大长度为 10 的输入。输入 11 个或更多数字会失败,我不明白为什么。

例如。

input = 1204067809 (correct)
output = 3

input = 12040678091 (fails!!)
output = 0

input = 12040678091423401231 (fails!!)
output = 1

代码:

#include <stdio.h>
int rCountZeros1(int num);

int main()
{
int number;
printf("Enter the number: \n");
scanf("%d", &number);
printf("rCountZeros(): %d\n", rCountZeros(number));
return 0;
}

int rCountZeros(int num)
{
if (num==0)
return 1;
else if (num<10)
return 0;

if (num % 10 == 0)
return 1+rCountZeros(num/10);
else
return rCountZeros(num/10);
}

最佳答案

12040678091 是 > 2**31,您的整数可能是 32 位,并且 scanf 无法正确处理溢出。所以它不适用于 int

您使用的示例适合 unsigned long longuint64_t。但是,我建议使用字符串方法:不要转换为整数,只需逐个字符解析来计算零,您将能够处理任何整数大小(好吧,如果您的字符串缓冲区足够大,那么是)

(使用递归函数计算字符串中的字符现在官方已经过分了,但出于研究目的可以通过传播字符串的索引而不是除后的值来完成)

关于c - C 中的递归函数 - 无法处理大输入 [计数零],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46439631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com