C/C++
牛哥之零的起点
ITman
展开
-
阿姆斯特朗数
【内容介绍】如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。例如1^3 +5^3 + 3^3 = 153。当n=3时,又称水仙花数,特指一种三位数,其各个数之立方和等于该数。 水仙花数共有4个,分别为:153、370、371、407。 【1000之内的阿姆斯特朗数列表】 153 370 371 407 【代码实现】#in原创 2014-11-10 15:33:08 · 977 阅读 · 0 评论 -
C语言中时间相关函数总结
在项目中总会设计到时间记录的问题,需要选择合适函数,获得相应的时间格式,特别在网上查找了一些关于这方面的资料,进行了总结。 C/C++中的日期和时间 头文件 time.h 函数用途 函数名 得到处理器时间 clock 得到时间差 difftime 设置时间 mktime 得到时间 time 得到以 ASCII码表示转载 2014-11-25 22:36:10 · 841 阅读 · 0 评论 -
现有1,2……一直到n的无序数组,求排序算法,并且要求时间复杂度为O(n),空间复杂度为O(1),使用交换,而且只能交换两个数
现有1,2……一直到n的无序数组,求排序算法,并且要求时间复杂度为O(n),空间复杂度为O(1),使用交换,而且只能交换两个数这是今天遇到的一个笔试题,当时想到的思路就是把数值和数组下标关联起来,后来事实证明这个思路是正确的,但是我写的代码出现了一些小偏差,代码如下[cpp] view plaincopy//错误代码:转载 2014-11-25 22:16:31 · 906 阅读 · 0 评论 -
探讨strcpy函数的实现(下)
昨天探讨了关于strcpy函数的一般实现方式:[cpp] view plaincopy"code" class="cpp">char* Mystrcpy(char* dst, const char* src) { assert(dst != NULL && src != NULL); char* ret = dst;转载 2014-11-25 22:09:52 · 377 阅读 · 0 评论 -
if.....else if .....else 与switch....case.....
闲谈一下if ......else.....与switch.....case.......原创 2014-11-20 15:16:10 · 600 阅读 · 0 评论 -
字节对齐
字节对齐1.问题的提出谈到字节对其人们都感觉很容易,其实不然,如果你把握不了真正的内部原则,怎么做怎么错,下面具体介绍一下字节对其的原则:写出一个struct或者union,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的变量总长度要大,这是怎么回事呢?讲讲字节对齐吧.2.为什么要字节对齐体系结构的对齐和不对齐,是在时间和空间上的一个权衡。字节对原创 2014-11-07 22:10:41 · 608 阅读 · 3 评论 -
走进结构体存储--位域
1、位域简介 在嵌入式编程中,经常会遇到下面的结构:[csharp] view plaincopyprint?struct _data { char a:6; char b:2; char c:7; }data; 在存储信息的时候,我们可能并不需要占用一转载 2014-11-25 22:42:05 · 610 阅读 · 0 评论 -
位运算操作相关
位操作 在压缩和解压数据时,常常需要在小于一个字节的数量级上 进行数据操作。因此,在讨论各种数据压缩方法之前,首先必须熟悉一些对数据位进行的操作。这些操作非常重要,因为C语言本身只有一小步等内在的、不可分割的操作数。下面是介绍一些位操作的基础,和参阅博客:位操作基础篇之位操作全面总结 下面是自己对博客内容简单的总结。 #include #inc转载 2014-11-25 22:29:59 · 445 阅读 · 0 评论 -
探讨strcpy函数的实现(上)
在笔试面试中经常会遇到要求实现strcpy函数的题目,这应该算是一道经典的题目了吧char* strcpy(char* dst, const char* src) 某内老师还教导我们:其实这个函数的返回值就应该是函数的第一个参数,也就是返回目的字符串地址好吧,其实在之前的笔试包括刚才在把原来笔试时我的答案再写出来的时候,我都没有转载 2014-11-25 22:02:05 · 455 阅读 · 0 评论 -
统计一个整数的二进制中1的个数的三种解法
[cpp] view plaincopy#include /* * 统计一个整数的二进制中1的个数 */ // 解法1 int countOne(int num) { int count = 0; while ( num ) { // 当最后一位为1转载 2014-12-03 10:37:53 · 2316 阅读 · 0 评论 -
面试中必须会写的函数源码--------strcpy()与strlen()
C语言标准库函数—strcpy(),字符串拷贝原型声明:extern char *strcpy(char *dest,const char *src);头文件:string.h功能:把从src地址开始且含有‘\0’结束符的字符串赋值到以dest开始的地址空间说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。 返回指向dest的指针。st原创 2014-12-03 14:03:55 · 630 阅读 · 0 评论 -
面试中必须会写的函数源码--------atoi()与itoa()
1.atio()题目:将字符串转换为整形,函数形式:int StrtoInt(char *string)如果你将代码写成如下的形式:恭喜你,你被刷了,哈哈。int StrtoInt(char *string){ int sum = 0; char *p= NULL; p = string; while(NULL! ==原创 2014-12-03 14:11:36 · 524 阅读 · 0 评论 -
最大的子序列之和问题
最大的子序列之和问题问题描述: 输入一组整数,求出这组数字子序列和中最大值。也就是只要求出最大子序列的和,不必求出最大的那个序列。例如:序列:-2 11 -4 13 -5 -2,则最大子序列和为20。序列:-6 2 4 -7 5 3 2 -1 6 -9 10 -2,则最大子序列和为16。[cpp] view plaincop转载 2014-12-03 10:51:08 · 517 阅读 · 0 评论 -
strcpy函数写法
写出字符串strcpy的函数实现过程式4分的代码:void strcpy( char *strdest, char *strsrc ){ while( (*strdest++ = * strsrc++) != ‘\0’ );} 6分的代码:void strcpy( char *strdest, const char *strsrc ) //将源字符串加co原创 2014-12-10 13:46:39 · 1553 阅读 · 0 评论 -
好多人多会做错的题
不多说开门见山,看看题zaishu原创 2014-11-20 11:37:46 · 504 阅读 · 0 评论 -
让你不再怕sizeof
#include#includevoid test(int a[],int n){ printf("%d\n",sizeof(a));}int main(void){int a[100]; char * p = NULL;char * ss1 ="0123456789";char ss2[] ="0123456789";char原创 2014-11-20 10:49:37 · 588 阅读 · 2 评论 -
最冤枉的关键字————sizeof
【冤枉的原因】:常常被人们误认为函数,其实不然。【用例子证明】题目如下:题目:下边哪项表述是错误的? int i; A .sizeof(int) B.sizeof(i) C.sizeof int D.sizeof i 当我们在计算机上进行调试的时候发现,D居然是对的,说明什么问题,他肯定不是函数,函数没关键字咋能行呢?想想看在int前边可以加s原创 2014-11-19 21:52:13 · 515 阅读 · 0 评论 -
【深信服面试题】编写函数:1-1000之中包含2的个数,比如22算两个。
43.(2014阿里巴巴校园招聘)关于格子路径问题①.假设下图中每个正方形的边长为1,则从A到B的最短路径为几条________【解题思想】首先把格子补全,如下图,这样的话从A到B的路径条数为: = ,其中6(横边格子数加纵边格子数),然后减去多出来的两条路径,则为 –2 = 13(条)②.(程序员面试宝典格子题)从A到B的最短路径有几条__________【解原创 2014-10-13 22:00:14 · 973 阅读 · 0 评论 -
如何实现两个数交换的交换以及宏定义的编写
【语句实现方法】方法1:不使用中间变量●利用位运算符 a = a^b; b = a^b; a = a^b; → a^= b^ = a^ = b;(不用考虑越界问题)【解释】:对于a^a =0, a^0 =aa = a^bb = a^b =( a^b) ^b =a^(b ^b) = a^0 = a(交换律)a = a^b = (a^b) ^a = a^a^b原创 2014-10-16 12:18:45 · 5377 阅读 · 1 评论 -
指针与数组的“爱恨情仇”
指针与数组的“爱恨情仇”本将中指针的算术运算本应放在第二讲中,但考虑到它与数组关系密切故将其纳入本将。1.指针的算术运算在上一讲指针初始化的第4种方式中提到了可以将一个T类型数组的名字赋给一个相同类型的指针,这说明指针可以和数组发生联系,在后面我们会看到这种联系是十分密切的。当有语句char ary[100] = {'a', 'b', 'c', 'd', 'e', 'f'}转载 2014-10-18 18:17:59 · 1090 阅读 · 0 评论 -
三个数求最大数、最小数、中间数
// 获取中间值public static int getMidNum(int a, int b, int c) {return (a c ? b : a > c ? c: a));}// 获取最大值public static int getMaxNum(int a, int b, int c) {return (a }// 获取最小值publ转载 2014-10-18 18:32:08 · 1866 阅读 · 0 评论 -
C语言中的宏定义
1. 简单宏定义简单的宏定义有如下格式:[#define指令(简单的宏)] #define 标识符替换列表替换列表是一系列的C语言记号,包括标识符、关键字、数、字符常量、字符串字面量、运算符和标点符号。当预处理器遇到一个宏定义时,会做一个 “标识符”代表“替换列表”的记录。在文件后面的内容中,不管标识符在任何位置出现,预处理器都会用替换列表代替它。转载 2014-10-21 20:14:07 · 1023 阅读 · 0 评论 -
N!知多少?
1、 给定一个整数N,那么N的阶乘N!末尾有多少个0呢?例如:N=10,N!=3 628800,N!的末尾有两个0。【解题思想】首先考虑,如果N!=K×10^M,且K不能被10整除,那么N!末尾有M个0。再考虑对N!进行质因数分解,N!=(2^x)×(3^y)×(5^z)…,由于10 =2×5,所以M只跟X和Z相关,每一对2和5相乘可以得到一个10,于是M = min(X, Z)。不难看出原创 2014-10-13 21:49:34 · 527 阅读 · 0 评论 -
栈的两个问题
33. 栈的问题1.若入栈的序列为1,2,3,4,5……..,n-1,n.输出序列的第一个元素为i,则输出序列的第j个元素为()A.j-i+1 B.i-j-1 C.不确定 D .i-j2. 一个栈的输入序列为123…n,若输出的序列的第一个元素是n,输出的第i(1个元素是【】A原创 2014-10-15 15:16:17 · 451 阅读 · 0 评论 -
通过函数申请内存的两个函数剖析(malloc函数讲解)
①.常见程序问题程序一:voidGetMemory(char *p){ p=(char*)malloc(100);}voidmain(){ char*str=NULL: GetMemory(str); strcpy(str,"HelloWorld"); printf("%s",str);}原创 2014-10-16 12:33:50 · 665 阅读 · 0 评论 -
STL中map用法详解
由于STL是一个统一的整体,map的很多用法都和STL中其它的东 西结合在一起;map中由于它内部有序,由红黑树保证,因此很多函数执行的时间复杂度都是log2N的,如果用map函数可以实现的功能,而STL Algorithm也可以完成该功能,建议用map自带函数,效率高一些……Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能转载 2014-10-18 18:37:20 · 387 阅读 · 0 评论 -
C语言函数指针
函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整形变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是一致的。函数指针有两个用途:调用函数和做函数的参转载 2014-10-21 20:19:02 · 427 阅读 · 0 评论 -
Fibonacci数列的函数实现总结
Fibonacci数列的函数实现f(0) = 0,f(1) =1,……..f(n)=f(n-1)+f(n-2)方法1:递归实现intFibonacci(int n){ if(n ==0) { return0; } if(n==1) { retu原创 2014-10-15 15:22:08 · 924 阅读 · 0 评论 -
给定整形数组A和目标整数t,A相邻元素差绝对值为1,请找到t在A中的位置
题目:有这样一个数组A,大小为n,相邻元素差的绝对值都是1。如:A={4,5,6,5,6,7,8,9,10,9}。 现在,给定A和目标整数t,请找到t在A中的位置。除了依次遍历,还有更好的方法么?已知的解法有这么2种,第一种是最快最好理解的。1. 由题目可知,这个数组中的数是“连续”的,就是说没有跳跃。从i=0开始遍历,t至少在后面abs(A[i]-t)的位置,跳跃到那个位置去判断转载 2014-10-23 20:26:53 · 638 阅读 · 0 评论 -
堆栈的区别
堆(Heap)栈(Stack)1、内存分配方面: 堆:一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式是类似于链表。可能用到的关键字如下:new、malloc、delete、free等等。 栈:由编译器(Compiler)自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。转载 2014-10-29 13:52:55 · 399 阅读 · 0 评论 -
C++指针和引用
1、指针和引用的定义在深入介绍之前我们首先来看一下指针和引用的定义、指针和引用的区别,然后分别针对指针和引用展开讨论,深入细节为何有这些差异。指针和引用的定义,下面用通俗易懂的话来概述一下:指针-对于一个类型T,T*就是指向T的指针类型,也即一个T*类型的变量能够保存一个T对象的地址,而类型T是可以加一些限定词的,如const、volatile等等。见下图,转载 2014-10-21 20:30:32 · 387 阅读 · 0 评论 -
C语言程序代码优化
C代码优化方案转自:http://zhouxiaoxi198906.blog.163.com/blog/static/1290140362010210105744556/1、选择合适的算法和数据结构选择一种合适的数据结构很重要,如果在一堆随机存放的数中使用了大量的插入和删除指令,那使用链表要快得多。数组与指针语句具有十分密切的关系,一般来说,指针比较灵活简洁,而数组则比较直转载 2015-01-02 11:38:09 · 935 阅读 · 0 评论