一个C语言面试编程题

原创 2007年09月11日 22:01:00
今天去一家公司面试,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));
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

一个中兴的面试题,输入两个数n和m,从数列1,2,3……n中随意取几个数,使其和等于m,要求将其中所有组合列出来编程求解(c语言递归函数分解法)

原题目:输入两个数n和m,从数列1,2,3……n中随意取几个数,使其和等于m,要求将其中所有组合列出来编程求解 c语言解法分析:            先判定n和m的大小,如果m小于n,则只需从1...

linux下的c语言-网络-网络编程面试题

基础部份: 1.下列程序在32位linux或unix中的结果是什么? func(char *str) {     printf("%d",sizeof(str));     print...

学习较底层编程:动手写一个C语言编译器

动手编写一个编译器,学习一下较为底层的编程方式,是一种学习计算机到底是如何工作的非常有效方法。 编译器通常被看作是十分复杂的工程。事实上,编写一个产品级的编译器也确实是一个庞大的任务。但是写一个小巧...

编程两个小问题,C语言中如何读取一行字符串的问题和VS2008中调试出错一个问题

问题一: 经常在链接是报link2001错误,其中一般是函数体没有定义错误。但是排除以上简单的外,还有一种如下无法解析系统文件中的函数定义。如下: LINK : warning LNK4098...

socket编程之C语言一个简单监听程序

坚持 成长 每日一篇一下是一个监听指定IP和端口号的服务端程序,只接收一次请求然后退出程序,程序环境是Mac环境,其他环境可以去掉NSlog#import #import #import #im...

c语言嵌入式面试常问道的题

C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为带面试者和被面试者提供许多有用信息.此外,撇开面试的压力不谈,这种测试也是...

12个有趣的C语言面试题

摘要:12个C语言面试题,涉及指针、进程、运算、结构体、函数、内存,看看你能做出几个! 1.gets()函数 问:请找出下面代码里的问题: #include int main(void)...

C语言面试题大汇总之华为面试题

该面试题大全可以很好地提高C++/C程序员的技术综合实力 1、局部变量能否和全局变量重名?    答:能,局部会屏蔽全局。要用全局变量,需要使用"::"  ;局部变量可以与全局变量同名,...
  • zgaoq
  • zgaoq
  • 2017-02-11 16:55
  • 1225
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)