在C中使用递归函数反转数字
Reversing digit using recursive function in C
我正在尝试创建一个递归函数来反转 C 中数字的数字。这就是我写的。使用一次时它工作正常,但使用多次时它会不断地将数字堆积在一起。我认为如果每次调用函数时将总和初始化为零,问题就可以解决,但我做不到。我试过将 sum=0 声明为全局变量,但结果是一样的。
输入-
12
23
34
45
输出
21
2132
213243
21324354
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int digit_reverse(int N)
{
int rem;
static int sum=0;
if(N>0)
{
rem=N%10;
sum=sum*10+rem;
digit_reverse(N/10);
}
else
return 0;
return sum;
}
int main()
{
int a[25],i;
for(i=0;i<4;i++)
{
scanf("%d", &a[i]);
}
printf("Output\n");
for(i=0;i<4;i++)
{
printf("%d\n",digit_reverse(a[i]));
}
}
也许你可以在不使用静态变量的情况下编写你的函数:
void _digit_reverse(int N, int *sum)
{
int rem;
if (N > 0)
{
rem = N % 10;
*sum = *sum * 10 + rem;
_digit_reverse(N / 10, sum);
}
}
int digit_reverse(int N)
{
int sum = 0;
_digit_reverse(N, &sum);
return sum;
}
或外求和:
int sum = 0;
int digit_reverse(int N)
{
int rem;
if (N > 0)
{
rem = N % 10;
sum = sum * 10 + rem;
digit_reverse(N / 10);
}
else
return 0;
return sum;
}
int main()
{
int a[25], i;
for (i = 0; i < 4; i++)
{
scanf("%d", &a[i]);
}
printf("Output\n");
for (i = 0; i < 4; i++)
{
sum = 0;
printf("%d\n", digit_reverse(a[i]));
}
}
我相信静态变量只会被初始化一次。这是你方法的问题。
老兄,如果代码不需要可重用,我觉得一切都很好我可以想到几种解决方案,但请记住静态和/或全局变量不是最佳实践,除非有必要。
其次改变你的
// from static int sum = 0;
// to
static long sum = 0;
// or
static long long sum = 0;
这个错误的原因是值溢出
在这种特定情况下,一个整数不能包含超过 4 个字节的数据,您肯定需要更多。
我正在尝试创建一个递归函数来反转 C 中数字的数字。这就是我写的。使用一次时它工作正常,但使用多次时它会不断地将数字堆积在一起。我认为如果每次调用函数时将总和初始化为零,问题就可以解决,但我做不到。我试过将 sum=0 声明为全局变量,但结果是一样的。 输入- 12 23 34 45 输出 21 2132 213243 21324354
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int digit_reverse(int N)
{
int rem;
static int sum=0;
if(N>0)
{
rem=N%10;
sum=sum*10+rem;
digit_reverse(N/10);
}
else
return 0;
return sum;
}
int main()
{
int a[25],i;
for(i=0;i<4;i++)
{
scanf("%d", &a[i]);
}
printf("Output\n");
for(i=0;i<4;i++)
{
printf("%d\n",digit_reverse(a[i]));
}
}
也许你可以在不使用静态变量的情况下编写你的函数:
void _digit_reverse(int N, int *sum)
{
int rem;
if (N > 0)
{
rem = N % 10;
*sum = *sum * 10 + rem;
_digit_reverse(N / 10, sum);
}
}
int digit_reverse(int N)
{
int sum = 0;
_digit_reverse(N, &sum);
return sum;
}
或外求和:
int sum = 0;
int digit_reverse(int N)
{
int rem;
if (N > 0)
{
rem = N % 10;
sum = sum * 10 + rem;
digit_reverse(N / 10);
}
else
return 0;
return sum;
}
int main()
{
int a[25], i;
for (i = 0; i < 4; i++)
{
scanf("%d", &a[i]);
}
printf("Output\n");
for (i = 0; i < 4; i++)
{
sum = 0;
printf("%d\n", digit_reverse(a[i]));
}
}
我相信静态变量只会被初始化一次。这是你方法的问题。
老兄,如果代码不需要可重用,我觉得一切都很好我可以想到几种解决方案,但请记住静态和/或全局变量不是最佳实践,除非有必要。 其次改变你的
// from static int sum = 0;
// to
static long sum = 0;
// or
static long long sum = 0;
这个错误的原因是值溢出 在这种特定情况下,一个整数不能包含超过 4 个字节的数据,您肯定需要更多。