[笔记]一道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语言,面试题
原文地址:https://www.cnblogs.com/journeyonmyway/p/2170429.html