一个C语言面试编程题

今天去一家公司面试,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));
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值