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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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); //执行递归函数
参考技术A

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

#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型指针变量,还有一些小的问题,比如函数返回值什么的。你可以再看看书或者查一下。运行结果如下:

参考技术B 你这程序有错误哦,输出结果是原序输出
以下是我稍微修改的程序,及相应的注释

#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()


希望能帮到你,可以继续探讨!
参考技术C 举个例子,比如输入的是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. 参考技术D 下面是程序代码:

#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();

C语言输入一个整数转化为字符串

将数字转化为对应的字符,可以通过n%10+48来实现,也可以通过n%10+‘0‘来实现,因为‘0’的ASCII码的数值就是48

因为字符串‘0’ 对应的10进制 整数是48 字符串‘9‘对应的10进制整数是57 所以 整数0-->0+48=48=‘0‘

2、该算法中建立了一个数组buffer用来存放字符串,通过递归调用让数字前往后依次转化为字符,然后通过指针p的自增,将字符串依次存放到数组中,每次p自增之后都赋值‘\0’,当还有新的字符需要转化的时候,就会有新的值覆盖‘\0’,当没有新的数字转化的时候,就最为字符串的结束标志。

以上是关于C语言程序:用递归法将一个整数n转化成字符串的主要内容,如果未能解决你的问题,请参考以下文章

用递归法将一个整数转换成字符串

用C语言递归法将一个整数化为字符串

c语言输入一个整数,用递归算法将整数倒序输出.

C语言:用递归法讲一个整数n转换成字符串。例如输入483,应输出字符串“483”,n的位数不定,为任意位数整

c语言中如何将字符串转化成整数型并输出?

用递归法将一个整数n转换成字符串,例如输入483,应输出字符串“483”。N的位数不确定,可以是任