在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 个字节的数据,您肯定需要更多。