您的位置:首页 > 编程语言 > C语言/C++

[笔记]一道C语言面试题:实现 itoa() 函数

2011-09-08 00:14 507 查看
题目:输入整数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语言,面试题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: