对于数字到字符的转化

来源:互联网 发布:淘宝网理发店挂画 编辑:程序博客网 时间:2024/06/14 20:40

举一个简单的例子:

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

以下是此题的代码。

#include<iostream.h>

#include<stdio.h>

int main()
{
void convert(int n);
int number;
cout<<"input an integer:"<<endl;
cin>>number;
cout<<"output:"<<endl;
if(number<0)
{
       putchar('-');
putchar(' ');
number=-number;
}
convert(number);
cout<<endl;
return 0;
}
void convert(int n)
{
int i;
if((i=n/10)!=0)
convert(i);
putchar(n%10+'0');
putchar(32);

对于这个函数,相信大多数人都能够看懂除了convert函数的其他部分。

那么在此,我们就只解释在这个convert函数中所说明的问题。

在这个convert函数中,我们可以看到  if((i=n/10)!=0)
convert(i);

这可以说是一个简单的递归函数,但其中同时也暗藏玄机,

下面请看在这个if函数里面,我们可以假设一下输入的是483,那么他将要运行的顺序是先输出3,在输出8,最后在输出4;

但是我们在运行时输出的明显是483,那么这是为什么呢?

这是因为在c/c++系统中有一个名为“栈”的东西,我们在convert中所要传达数据,都已二进制的形式存在在这里,

而此时他所存入这个栈的顺序为先3,后8,最后4。而他在输出时,是从这个栈里面的最高的那一层开始输出,

及时从4开始输出,后是8,最后是3;

这是一个他的输出问题。

最后的问题就是putchar(n%10+'0');

我们有很多人都在疑惑这个‘0’到底是干什莫的;

我们可以假设这里输入的是3;

那么0的ASCLL代码是48,48加3是51,那麽我们就可以知道在ASCLL中51数值所对应的字符是“3”;

从而这个convert就在这里可以输出字符。


                                                                                           

原创粉丝点击