关闭

一个C语言面试编程题

标签: 面试语言编程cintegerstring
835人阅读 评论(1) 收藏 举报
今天去一家公司面试,CTO要求我编一个程序看看 ,题目是:不用C语言库函数实现整数转换为字符串。
开始想到的只是用对10取余数来获取该整数所包含的一个个数字。不过这种方法有一个缺点,就是得到的字符串是反的,也就是先是低位数字、然后才是高位的数字。又仔细想了想,发现可以用递归来实现,回来后用lcc编译运行发现没有问题。用递归实现整数到字符串转换,代码比较清晰易懂,函数也比较简单。优化后的源代码如下:
#include <stdio.h>

#define MAX_LEN  15  /* 最大位数 */

/* 转换时用到的递归函数 */
char *trans_int(int num,char *str)
{
    int node_num,digit;
    char *ptr;

    if(num < 10) /* 只剩个位 */
    {
        *str=num + '0';  /* 数字转换为对应的ascii代码 */
        return str;
    }
    else
    {
        node_num = num / 10;
        ptr=trans_int(node_num,str); /*递归调用*/
        digit = num - node_num * 10;
        ptr++;
        *ptr = digit + '0';
        return ptr;
    }
}

/* 转换函数 */
char * itoa(int num)
{
    static char str[MAX_LEN+1];
    int positive_num;
    char *ptr;

    ptr = str;
    if(num >= 0)
    {
        ptr=trans_int(num,str);
    }
    else /* 处理负数 */
    {
        *(ptr++) = '-';
        positive_num = num * -1;  /* transform to positive integer */
        ptr=trans_int(positive_num,ptr);
    }
    ptr++;
    *ptr='/0';

    return str;
}

/* 测试用main函数 */
void main()
{
    int n;
    printf("Input a integer:");
    scanf("%d",&n);
    printf("The integer %d to string result is : '%s'/n",n,itoa(n));
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1063947次
    • 积分:10053
    • 等级:
    • 排名:第1703名
    • 原创:127篇
    • 转载:184篇
    • 译文:0篇
    • 评论:80条
    文章分类
    最新评论