一个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
我编的程序如下:
# 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