[英]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.