整数n转换为字符串

发布于:2022-12-25 ⋅ 阅读:(542) ⋅ 点赞:(0)

1、源代码如下

#include<stdio.h>//头文件 
int main()                       //主函数 
{
  void convert(int n);           //函数声明 
  int number;                    //定义整型变量 
  printf("输入一个整数:");      //提示语句 
  scanf("%d",&number);          //键盘输入 
  printf("输出结构:");         //提示语句 
  if(number<0)
  {
    putchar('-');      //先输出一个-号 
    putchar(' ');      //再输出一个空格 
    number=-number;
  }
  convert(number);     //调用自定义的转换方法 
  printf("\n");        //换行 
  return 0;            //主函数返回值为0 
}
void convert(int n)    //自定义的转换方法 
{ 
  int i;               //定义整型变量 
  if((i=n/10)!=0)      //递归
  {
    convert(i);
  }
  putchar(n%10+'0');
  putchar(32);
}

在这里插入图片描述

2、源代码讲解

if(number<0)
  {
    putchar('-');      //先输出一个-号 
    putchar(' ');      //再输出一个空格 
    number=-number;
  }

这几句代码的实质是将一个负数转换为正数,按照正数进行递归调用!

void convert(int n)    //自定义的转换方法 
{ 
  int i;               //定义整型变量 
  if((i=n/10)!=0)      //递归
  {
    convert(i);
  }
  putchar(n%10+'0');
  putchar(32);
}

上面的函数是为了利用 系统栈 来完成转换的,转换示意图如下
在这里插入图片描述
很明显当刚开始执行convert()函数的时候,输入的是 n = 438 ,此时 438/10 = 43 不等于 0,那么又对 43 进行递归调用,43/10 = 4 不等于 0,又对 4 进行递归调用,4 /10 = 0,不满足条件,执行 4%10+‘0’ ,打印输出字符 4;4 退栈,执行 43%10+‘0’ ,打印输出 3;43退栈 ,执行 438%10+‘0’,打印输出 8。栈空,执行完毕!

注:下面是c/c++中的数字与字符之间的转换关系!

#include<stdio.h> 
int main(){
	printf("输出的是数字 %d",1+'0');  //输出数字49 
	printf("输出的是字符 %c",1+'0');  //输出字符1 
}

在这里插入图片描述

3、算法分析

解决本题的关键是要彻底理解递归函数的实质是系统背后调用 系统栈 来完成运算操作的,如果不理解递归函数的实质,否则很难解决本题!另外还需要知道字符和数字之间的转换关系,只有这样才能彻底解决本题!


网站公告

今日签到

点亮在社区的每一天
去签到