ep5_9.cpp
上传用户:wxcui2006
上传日期:2022-07-12
资源大小:1274k
文件大小:1k
源码类别:

书籍源码

开发平台:

Visual C++

  1. /*5.9   使用递归和非递归的两种方法编写函数
  2. char *itoa (int n,char *string);
  3.  将整数n转换为十进制表示的字符串。(在非递归方法中,可使用reverse()函数。)
  4. */
  5. #include<iostream>
  6. using namespace std;
  7. char* reverse (char* s){
  8. char temp,* temp1=s,* temp2=s;
  9. while(*temp2) temp2++;
  10. temp2--;//指针移回串尾
  11. while(temp2-temp1>0){//注意此处,从串两头的指针同时向中间移动,重合或交错时停止
  12. temp=*temp1;
  13. *temp1=*temp2;
  14. *temp2=temp;
  15. temp1++;
  16. temp2--;
  17. }
  18. return s;
  19. }
  20. char *itoa (int n,char *string){
  21. char *temp=string;
  22. if(n<0){
  23. *temp++='-';
  24. n=-n;
  25. }
  26. do{//注意个位放在前了
  27. *temp++=n%10+48;
  28. }while(n=n/10);//显式的循环
  29. *temp='';
  30. if(*string=='-') temp=string+1;//有负号仅反转数字部分
  31. else temp=string;
  32. reverse(temp);//个位放到后面
  33. return string;
  34. }
  35. char *itoa1 (int n,char *string){
  36. if(n<0){
  37. *string++='-';
  38. n=-n;
  39. }
  40. if(n/10) string=itoa1(n/10,string);//隐式循环
  41. *string++=n%10+48;//第一次是数字最高位放串的最前面的字符(不含符号),注意指针移动在后
  42. *string='';
  43. return string;//注意返回的指针已后移一字符
  44. }
  45. char *itoa0 (int n,char *string){
  46. itoa1(n,string);
  47. return string;
  48. }
  49. int main(){
  50. int num;
  51. char st[20];
  52. cin>>num;
  53. cout<<"输出数字串:"<<itoa(num,st)<<endl;
  54. cin>>num;
  55. cout<<"输出数字串:"<<itoa0(num,st)<<endl;
  56. return 0;
  57. }
  58. /*递归算法难度大,对学生可不要求*/