0

我为学校编写了以下 C 代码,我似乎无法找出为什么它返回 0。我必须使用递归位数和幂函数来递归反转输入数字(反转函数必须是 1 参数函数):

#include<stdio.h>

int digits(int x)
{
    if(x!=0)
        return 1 + digits(x/10);
    else
        return 0;
}

int power(int x,int y)
{
    if(y!=1)
        return x*power(x,y-1);
    else
        return x;
}

int reverse(int x)
{
    static int nr=0;
    if(digits(x)!=1)
        return nr + power(10,digits(x)-1)*(reverse(x/10)%10);
    else
        return x;

}

int main()
{
    int x;
    scanf("%d",&x);
    printf("%d\n",reverse(x));
    return 0;
}
4

2 回答 2

1

你几乎做对了,唯一错误的是你如何连接递归输出。

只是改变 :

return nr + power(10,digits(x)-1)*(reverse(x/10)%10);

至 :

return power(10,digits(x)-1)*(x%10) + (reverse(x/10));
于 2013-10-24T20:42:02.133 回答
0
int reverse(int x)
{
    if ( !(x/10) ) 
        return x;
    else
        return (x % 10) * power(10,digits(x/10)) + reverse(x/10);
}
于 2013-10-24T20:44:50.250 回答