⽤递归的⽅法将⼀个整数n转换成字符串
要求:
⽤递归的⽅法将⼀个整数n转换成字符串。例如,输⼊438,应输出“483”。n的位数不确定,可以是任意的整数。
分析:应该将输⼊的数中的每个数进⾏剥离,然后从头到尾将每个数字转化为对应的字符。递归函数Covert需要完成的⼯作是,当n不是个位数(n/10!=0)的时候,将n/10作为参数进⾏递归调⽤函数Covert,然后将数字n的最后⼀位数字转化为字符串。因为每次的递归调⽤Covert函数,是发⽣在将n的最后⼀个数字转化为字符串的操作之前的,所以会依次将数字n的每个数字转化为字符。
⽅法⼀:
#include <iostream>
using namespace std;
void Convert(int n)
{
char p;数组转换成字符串
if(n/10 != 0)
{
Convert(n/10);  //通过递归输出
}
p=n%10+48;//将数字转化成对应的字符串 ,并将最后⼀位数字转化为字符
cout<<p;
}
int  main()
{
int n ;
cout<<"please input an integer:";
cin>>n;
cout<<"Outcome:";
if(n<0){
n=-n;
cout<<"-";
Convert(n);
}else{
Convert(n);
}
cout<<endl;
return 0;
}
分析:
⾸先在main函数中输⼊⼀个整数,然后通过Covert函数的递归,将n中每个数字转化为对应的字符,并输出。
核⼼代码是:
p=n%10+48;
这⼀句,原理是将当前的Covert(n ),中n的最低位进⾏输出。
⽅法⼆:
#include<iostream>
using namespace std;
char * Covert(int n, char * pointer){
char * p=pointer;
if(n/10!=0){
p=Covert(n/10,p);
}
*p=n%10+'0';//将数字转化为字符
++p;
*p='\0';//为字符最后添加'\0'
return p;
}
int main(){
int n;
char buffer[20];
cout<<"please input an integer:";
cin>>n;
cout<<"\nOutput:";
if(n<0){
n=-n;
Covert(n,buffer);
cout<<"-"<<buffer<<"\n\n";
}else{
Covert(n,buffer);
cout<<buffer<<"\n\n";
}
return 0;
}
貌似这个⽅法才更加符合题意,这是参照:zhidao.baidu/question/502758422.html
分析:
1、将数字转化为对应的字符,可以通过n%10+48来实现,也可以通过n%10+'0'来实现,因为‘0’的ASCII码的数值就是48
2、该算法中建⽴了⼀个数组buffer⽤来存放字符串,通过递归调⽤让数字前往后依次转化为字符,然后通过指针p的⾃增,将字符串依次存放到数组中,每次p⾃增之后都赋值‘\0’,当还有新的字符需要转化的时候,就会有新的值覆盖‘\0’,当没有新的数字转化的时候,就最为字符串的结束标志。