[笔记]一道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); }
爱生活,爱拉风