用遞歸的方法將一個整數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;
}
    
貌似這個方法才更加符合題意,這是參照:http://zhidao.baidu.com/question/502758422.html

分析:

1、將數字轉化為對應的字符,可以通過n%10+48來實現,也可以通過n%10+'0'來實現,因為‘0’的ASCII碼的數值就是48

2、該算法中建立了一個數組buffer用來存放字符串,通過遞歸調用讓數字前往后依次轉化為字符,然后通過指針p的自增,將字符串依次存放到數組中,每次p自增之后都賦值‘\0’,當還有新的字符需要轉化的時候,就會有新的值覆蓋‘\0’,當沒有新的數字轉化的時候,就最為字符串的結束標志。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM