zoukankan      html  css  js  c++  java
  • [笔记]一道C语言面试题:实现 itoa() 函数

    题目:输入整数n,如100,将其转为某进制再输出字符串
    来源:某500强企业面试题目
    思路:与这道题实现方式类似,注意正负号

    //----------------------------------------
    // 实现 itoa() 函数
    //----------------------------------------
    char* myitoa(int n, char* str, int radix){
      int a = n;
      int b = 0;
      int c = 1;
      char* p = str;
    
      if (0 == a){                  // 如果是0,直接输出"0"
        strcpy(str, "0");
        return str;
      }
      else if (a < 0){              // 如果是负数,记下负号
        c = -1;
        a = -a;
      }
    
      while(a > 0){                 // 反复取余
        b = a % radix;
        a = a / radix;
    
        if (b < 10) 
          *p = b + '0';             // 0-9 直接输出"0"-"9"
        else
          *p = b - 10 + 'A';        // > 10 输出"A"-...
    
        p++;
      }
    
      if (c < 0) *p++ = '-';        // 按需添加负号
      *p = 0;                       // 字符串结尾
    
      // 下面将字符串 str 逆序即可,也可调用系统函数 str = strrev(str);
    
      int len = strlen(str);        // 取出长度
      int i = 0;
      char ch = 0;
    
      for (i = 0; i < len / 2; i++){// 首尾交换,共计 len / 2 次
        c = str[i];
        str[i] = str[len - i - 1];
        str[len - i - 1] = c;
      }
      
      return str;
    }
    
    //----------------------------------------
    // 测试 itoa()
    //----------------------------------------
    void Testmyitoa(void) {
      int n = 0, r = 2;
      char str[100];
    
      // 下面输出为: itoa(11, 2) = 1011
      n = 11; r = 2;
      myitoa(n, str, r);
      printf("itoa(%d, %d) = %s\n", n, r, str);
    
      // 下面输出为:itoa(-3000, 16) = -BB8  
      n = -3000; r = 16;
      myitoa(n, str, r);
      printf("itoa(%d, %d) = %s\n", n, r, str);
    }
    Technorati 标签: C语言,面试题
  • 相关阅读:
    MapReduce测试进度
    MapReduce实验进度
    Hive安装心得及教程分享
    MapReduce实验进程
    个人课程总结
    最长单词链
    用户体验评价
    SSMS无法新建查询问题解决办法征集
    寻找“水王”
    算法和数据结构
  • 原文地址:https://www.cnblogs.com/journeyonmyway/p/2170429.html
Copyright © 2011-2022 走看看