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转化成字符串的主要内容,如果未能解决你的问题,请参考以下文章