我正在嘗試創建一個遞回函式來反轉 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]));
}
}
uj5u.com熱心網友回復:
也許您可以在不使用靜態變數的情況下撰寫函式:
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]));
}
}
我相信靜態變數只被初始化一次。這是您的方法的問題。
uj5u.com熱心網友回復:
伙計,如果代碼不需要可重用,我覺得一切都很好。我可以想到幾種解決方案,但請記住,除非必要,否則靜態和/或全域變數不是最佳實踐。其次改變你的
// from static int sum = 0;
// to
static long sum = 0;
// or
static long long sum = 0;
此錯誤的原因是值溢位,在這種特定情況下,整數不能有超過 4 個位元組的資料,您肯定需要更多。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/418833.html
標籤:
下一篇:Rust中不同功能的意義何在?
