簡體   English   中英

在 C 中使用遞歸 function 反轉數字

[英]Reversing digit using recursive function in C

我正在嘗試創建一個遞歸 function 來反轉 C 中數字的數字。 這是我寫的。 一次使用時效果很好,但多次使用時它會不斷地將數字堆積在一起。 我認為如果每次調用 function 時總和都初始化為零,則問題可以解決,但我無法做到。 我嘗試將 sum=0 聲明為全局變量,但結果是一樣的。 輸入 - 12 23 34 45 Output 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]));
 }

 }

也許您可以在不使用 static 變量的情況下編寫 function :


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]));
    }
}

我相信 static 變量只被初始化一次。 這是您的方法的問題。

伙計,如果代碼不需要可重用,我覺得一切都很好我可以想到幾種解決方案,但請記住 static 和/或全局變量不是最佳實踐,除非必須這樣做。 其次改變你的

// from static int sum = 0;
// to
static long sum = 0;
// or 
static long long sum = 0;

此錯誤的原因是值溢出 integer 在這種特定情況下不能有超過 4 個字節的數據,您肯定需要更多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM