一个C编程题

来源:百度知道 编辑:UC知道 时间:2024/05/30 13:13:23
原题是用递归法将一个长整型数n逆序转换成字符串。例如,输入483,应输出字符串"384"。n的位数不确定,可以是有效范围内的任意位数。
我编的程序如下:
# include <stdio.h>
# include <math.h>
void main ()
{
int i,j;
long x;
char a[20];
void chu(long x,int n,char *a);
scanf("%ld",&x);
for (i=1;;i++)
if (x/(int)pow(10,i)==0) break;
chu(x,i,a);
for(j=1;a[j]!=0;j++)
printf("%c",a[j]);
printf("\n");
}

void chu(long x,int n,char *a)
{
int i,m;
int tail (long x,int n);
m=n;
for(i=1;i<=n;i++)
{
a[i]=tail(x,m-1);
x=x/((int)pow(10,i));
m--;
}
a[n+1]=0;
return;
}

int tail (long x,int n)
{
int p,t;
p=x%((int)pow(10,n));
if (n==0) t=p;
else t=tail(p,n-1);
return (t);
}

但运行时什么都没有显示,用F10看貌似是chu这个函数没有被调用,哪位高手帮忙解决下,谢谢了.
chu函数是依次把最后一位去掉再分离出新的最后一位数,如把483分成483

void chu(long x,int n,char *a);
是函数声明,并没有错。

程序人为复杂了,算法有问题。
tail函数实际上和下面的函数功能相同
int tail (long x,int n) { return (x%10); }

--------------------------------------------------------------------------
# include <stdio.h>
# include <math.h>

void chu(long x,int n,char *a); /*放到函数外面声明*/

void main ()
{
int i,j;
long x;
char a[20];

scanf("%ld",&x);
for (i=0;;i++)/*数组下标是从0开始的,C语言循环也习惯从0开始*/
if (x/(int)pow(10,i)==0) break;
chu(x,i,a);
printf("%s\n",a);/*直接输出字符串*/
getch();
}

void chu(long x,int n,char *a)
{
int i;
for(i=0;i<n;i++)
{
a[i]=x%10+'0';/*0-'0' 1-'1' 2-'2' ... 转换成字符*/
x=x/10;
}
a[n]=0;
return;
}

继续简化:
# include <stdio.h>

void main ()
{
int i=0;
long x;
cha