C语言程序:用递归法将一个整数n转化成字符串

如题所述

//举例说明该函数流程,假如输入123,123/10后得12,余数是3
//再次运行convert函数,12/10得1,余数是2
//再次运行convert函数,1/10得0,余数是1
//至此,递归结束,开始打印数字,首先打印最后一次递归的结果1
//然后打印倒数第二次的结果2
//最后打印3,输出123
void convert(int n)
{
int i; //定义整数变量
if ((i=n/10)!=0)//如果整数i除以10后不为0,说明高位还有值,需要更多字符来表示
convert(i);//调用自身,使用除以10后的i值
putchar(n%10+'0');//打印余数,余数是1则打印字符1,以此类推
}
main()
{
int number;//定义整数变量
printf("\nInput an integer:");//输出信息
scanf("%d",&number);//让用户输入一个整数
printf("Output:");//输出信息
if (number<0)//如果是负数
{
putchar('-');//打印负号
number=-number;//负数变为正数
}
convert(number); //执行递归函数
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-10-07

我把你的程序改了一下,现在可以得到正确的答案了。先把源代码复制在下面吧。

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>

int fun(int number,int digit,char *str);

int main()
{
char s,string[20];
int num,digit;

printf("请输入一个整数:\n");
        scanf("%d",&num);
printf("请输入它的位数:\n");
scanf("%d",&digit);
printf("它是负数吗(Y/N)?\n");
getchar();
scanf("%c",&s);

        if(s=='Y') 
{
string[0]='-';
fun(num,digit,&string[1]);

}
else
{
fun(num,digit,string);
}

printf("the result is %s\n",string);

return 0;
}

int fun(int number,int digit,char *str)
{
int num;
char ch;

if(digit!=0)
{
num=number/(int)pow(10,digit-1);
//printf("%d\n",num);

ch=num+'0';
*str=ch;
str++;

*str='\0';
//printf("%c\n",ch);
fun(number%(int)pow(10,digit-1),digit-1,str);
}
return 0;
}

也是用的递归的方法,可以自己跑一下程序。再说一下问题吧,感觉你不太熟悉strcat()这个函数,其中的参数都应是char型指针变量,还有一些小的问题,比如函数返回值什么的。你可以再看看书或者查一下。运行结果如下:

第2个回答  2010-06-10
你这程序有错误哦,输出结果是原序输出
以下是我稍微修改的程序,及相应的注释

#include<stdio.h>
void convert(int n)
{
int i;
//注意,下面这语句应该是放这里的,而不是放在后面
putchar(n%10+'0');//每次除10取余数,加‘0’转化为字符,一个个反序输出
if ((i=n/10)!=0)//把传递进来的数除10取整,比如123,取一次整i就变为12
convert(i); //调用自身这个函数,把i的现值传递到convert函数进行递
//归,以此类推,直到(i=n/10)=0时,停止递归,一步步返回
}
main()
{
int number;
printf("\nInput an integer:");
scanf("%d",&number);
printf("Output:");
if (number<0) //判断是否为负数
{
putchar('-'); //如果为负数,先输出一个负号
number=-number; //将负数转化为整数,方面后面运算
}
convert(number); //调用递归函数convert()
}

希望能帮到你,可以继续探讨!
第3个回答  2014-04-03
举个例子,比如输入的是123,调用convert函数,convert(123)->convert(12)->convert(1)->convert(0),返回至上层,即convert(1)函数里继续运行,s[0]=1%10+'0'='1';deep++;,再次返回上层函数里运行,s[1]=12%10+'0'='2';deep++;继续返回上层函数里运行,s[2]=123%10+'0'='3';deep++;运行2完毕,返回至main函数。s[4]=0;puts(s)输出字符串123.
第4个回答  2016-01-14
下面是程序代码:

#include<stdio.h>
int gnn(int e)
{
int j;
int last=1;
for(j=0;j<e;j++)
{
last=10*last;
}
return last;
}
void fun(long int n,int N)
{
int next;
if(N<1)
{
printf("\"");
return;
}

else
{
next=n/gnn(N-1);
printf("%d",next);
fun(n%gnn(N-1),N-1);
}
}
void main()
{
long int n;
printf("请输入所要转换的数字:");
scanf("%d",&n);
int N=1;
long int k=n/10;
for(int i=0;k!=0;i++)
{
k=k/10;
N++;
}
printf("转换后的输出为: ");
printf("\"");
fun(n,N);
printf("\n");
//getch();
}

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网