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