gpt4 book ai didi

c - 如何使用递归函数遍历某个数字并提取小于 5 的数字?

转载 作者:太空宇宙 更新时间:2023-11-04 06:25:28 25 4
gpt4 key购买 nike

又是我。我删除了我之前的问题,因为它被问得很少而且我什至没有包含任何代码(我是这个网站的新人,也是 C 的新人)。所以我需要编写一个程序,打印出给定数字中小于 5 的数字,以及数字的个数。

例如:5427891 应该是 421 - 3

作业还指出我需要在递归函数中使用 void 打印小于 5 的数字。

这就是我到目前为止写的

#include<stdio.h>
void countNum(int n){
//no idea how to start here
}

int main()
{
int num, count = 0;

scanf("%d", &num);
while(num != 0){
num /= 10;
++count;
}
printf(" - %d\n", count);


}

我已经编写了计算位数的主要函数,我的想法是我将分配(不确定我在这里使用正确的词) num 整数给 CountNum 来计算数字中的位数结果。但是,这就是我卡住的地方。我不知道如何在我的 void 函数中提取和打印 <5 的数字。有什么建议吗?

编辑:

我尝试了一种不同的方法(不使用 void 并重新开始),但现在我得到了我需要的数字,除了反向。例如,我打印的不是 1324,而是 4231。

这是代码

#include <stdio.h>
int rec(int num){
if (num==0) {
return 0;

}
int dg=0;
if(num%10<5){
printf("%d", num%10);
dg++;
}

return rec(num/10);
}
int main(){
int n;
scanf("%d", &n);
int i,a;
for(i=0;i<n;i++)
{
scanf("%d", &a);
rec(a);
printf(" \n");
}



return 0;
}

为什么会发生这种情况,我应该如何解决?

最佳答案

您的问题中没有任何内容指定输入的数字是实际 int 的一部分。相反,它只是恰好(希望)位于 { 0..9 } 中某处的一系列字符,因此代表一些无界的数字

就是说,您可以向下面发送任意数量的数字字符,无论是一还是一百万,都没有区别。一旦遇到来自 stdin 的非数字或 EOF,算法就会展开并累积您寻求的总数。

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int countDigitsLessThanFive()
{
int c = fgetc(stdin);
if (c == EOF || !isdigit((unsigned char)c))
return 0;

if (c < '5')
{
fputc(c, stdout);
return 1 + countDigitsLessThanFive();
}
return countDigitsLessThanFive();
}

int main()
{
printf(" - %d\n", countDigitsLessThanFive());
return EXIT_SUCCESS;
}

示例输入/输出

1239872462934800192830823978492387428012983
1232423400123023423420123 - 25

12398724629348001928308239784923874280129831239872462934800192830823978492387428012983
12324234001230234234201231232423400123023423420123 - 50

我有点怀疑这不是您要找的东西,但我会把它留在这里足够长的时间,让您先看一眼再放下它。老实说,该算法对于有用的递归演示来说毫无意义,但至少仍然演示了递归。

关于c - 如何使用递归函数遍历某个数字并提取小于 5 的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27611941/

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