摘要: 扩展问题:给定二进制数N,写下从1开始到N的所有二进制数,数一下其中出现的所有“1”的个数: f(1)=1 f(10)=10 (因为01,10,有两个1) f(11)=100 (因01,10,11,有四个1)解答:考虑f(1011):1,10,11,100,101,110,111,1000,1001,1010,1011 第一位上:高位数为101,每两个数就出现一个1,则出现101个1;且current位为1,低位数为0,所以5+1=6 第二位上:高位数为10,每四个数出现一个1,则出现(10)*2=4个1;且current位为1,... 阅读全文
posted @ 2013-04-02 16:22 一枚程序员 阅读(321) 评论(0) 推荐(0) 编辑
摘要: 1、给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现的所有“1”的个数?解法一:从1到N遍历,将每个数中含有“1”的个数加起来。。时间复杂度:O(n)*每个整数中“1”的个数复杂度=O(N*lgN)。。随着N增大,时间超越线性增长。。#include<iostream>using namespace std;int getNum(int n){ if(n==0) return 0; int num=0; while(n!=0) { num+=(n%10==1)?1:0; n/=10; } return nu... 阅读全文
posted @ 2013-04-02 16:01 一枚程序员 阅读(470) 评论(0) 推荐(0) 编辑
摘要: 解法一:举例说明,为了减少复杂度,就使用八位二进制吧。设 A = 0010 1011, B = 0110 0101. 1. C = A & B = 0010 0001; 2. D = A | B = 0110 1111; 3. E = C ^ D = 0100 1110; 4. 结果E中有4个1,那么也就是说将A变成B,需要改变4位(bit)。 至于如何判断E的二进制表示中有几个1,可以采用快速移位与方法。 算法原理如下: 1. A & B,得到的结果C中的1的位表明了A和B中相同的位都是1的位; ... 阅读全文
posted @ 2013-04-02 10:30 一枚程序员 阅读(4391) 评论(6) 推荐(2) 编辑
摘要: #include<iostream>using namespace std;/* Description: 解法一:求余法,时间复杂度O(lgn) 以10100010为例: 第一次除以2时,商为1010001,余数为0; 第二次除以2时,商为101000,余数为1; ...... 故,可以利用整形数据除法的特点,通过相除判断余数的值来分析。有如下代码: */int getNum1(int n){ if(n==0) return 0; int count=0; while(n) { if(n%2==1) { ... 阅读全文
posted @ 2013-04-02 09:47 一枚程序员 阅读(466) 评论(0) 推荐(0) 编辑
摘要: #include<iostream>using namespace std;/* Name: Copyright: Author: Date: 25/03/13 09:12 Description: 虚函数的作用是多态的应用,这样用子类去new一个父类的对象将调用子类的方法 */class Base{public: Base(int j):i(j){} virtual ~Base(){printf("Base del\n");} //此处若不加 virtual,那么将不会调用基类析构 void func1(){printf("Base fu... 阅读全文
posted @ 2013-03-25 09:16 一枚程序员 阅读(439) 评论(0) 推荐(0) 编辑
摘要: /**原型:int strcmp(const char *s1, const char * s2, size_t n);*用法:#include <string.h>*功能:比较字符串s1和s2的前n个字符。*说明:* 当s1<s2时,返回值<0* 当s1=s2时,返回值=0* 当s1>s2时,返回值>0*编程实现strncmp*/#include <cstdio>#include <cassert>int _strncmp(const char *s, const char *t, int count){ assert((s != 阅读全文
posted @ 2013-03-20 22:25 一枚程序员 阅读(664) 评论(0) 推荐(0) 编辑
摘要: /**原型:char *strcat(char *dest,const char *src);*用法:#include <string.h>*功能:把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。*说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。* 返回指向dest的指针。*编程实现strcat*/#include <cstdio>#include <cassert>char * _strcat(char * dest,const char * 阅读全文
posted @ 2013-03-20 22:19 一枚程序员 阅读(372) 评论(0) 推荐(0) 编辑
摘要: /**原型:char *strncat(char *dest, const char *src, size_t n);*用法:#include <string.h>*功能:把src所指字符串的前n个字符添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。*说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。* 返回指向dest的指针。*编程实现strncat*/#include <cstdio>#include <cassert>char * _strncat(char 阅读全文
posted @ 2013-03-20 22:15 一枚程序员 阅读(640) 评论(0) 推荐(0) 编辑
摘要: /**原型:int strcmp(const char *s1,const char * s2);*用法:#include <string.h>*功能:比较字符串s1和s2。*说明:* 当s1<s2时,返回值<0* 当s1=s2时,返回值=0* 当s1>s2时,返回值>0*编程实现strcmp*/#include <cstdio>#include <cassert>int _strcmp(const char * s,const char * t){ assert((s != NULL)&&(t != NULL)); 阅读全文
posted @ 2013-03-20 22:03 一枚程序员 阅读(432) 评论(0) 推荐(0) 编辑
摘要: /**原型:char *strrchr(const char *s,int ch);*用法:#include <string.h>*功能:查找字符串s中第一次出现字符c的位置*说明:返回最后一次出现c的位置的指针,如果s中不存在c则返回NULL。*编程实现strrchr*/#include <cstdio>#include <cassert>char * _strrchr(const char * str, int ch){ assert(str != NULL); for( ; *str != (char)ch; str++) if(*str ==  阅读全文
posted @ 2013-03-20 21:53 一枚程序员 阅读(527) 评论(0) 推荐(0) 编辑