2013年9月21日

C++高精度模板

摘要: #include #include #include #include #include #define abs(a) ((a)>=0?(a):-(a)) using namespace std; class LargeInteger{public: LargeInteger(const char * s); LargeInteger(unsigned long long a = 0):negative(false) { if( a == 0 ) { v.resize(1); n = 0; ... 阅读全文

posted @ 2013-09-21 22:42 十指之间 阅读(413) 评论(0) 推荐(0) 编辑

2013年4月25日

C++运算符重载总结

摘要: 1.双目运算符 : 操作数1 运算符 操作数2算术运算符: +,-,*,/,%,后缀++,后缀--位运算符: ^,&,|,<<,>>赋值运算符: +=,-=,*=,/=,%=,^=,&=,|=,>>=,<<=比较运算符: <,>,<=,>=,==,!=逻辑运算符: &&,||注意:后缀++,后缀--本来应该是单目运算符,但是为了能够和前缀++,前缀--加以区别,它也带了一个参数,这个参数必须为int类型。例如如下代码:#include<iostream>using namespa 阅读全文

posted @ 2013-04-25 22:52 十指之间 阅读(253) 评论(0) 推荐(0) 编辑

2013年4月22日

原地矩阵转置 微软面试题

摘要: 昨天微软面试遇到的一道题: 题意大约是这样:一个m×n的矩阵保存在一个一维数组里,然后要求空间复杂度不超过O(n)的条件下完成对它的转置,转置结果还是保存在这个数组里。 因为如果没有空间的限制时,转置的复杂度为O(n×m),所以,拿到这题我就本能的想有没有什么巧妙的方法在O(n)的空间下时间也是O(m×n)。想了半天没想出来,只想到了一个O(m×m×n)的算法。 算法思想大致是,每次完成一行的转置,把转置后的一行n个元素放到辅助空间,然后所有元素像后平移把空出来的位置填满,然后前面自然就是n个空位,然后把这n个元素插入。这样m-1次插入后,矩阵 阅读全文

posted @ 2013-04-22 17:30 十指之间 阅读(1984) 评论(0) 推荐(0) 编辑

2013年4月15日

求小于N的所有素数

摘要: 解法1:检查每一个数K,在2~sqrt(K)区间内是否含有它的因子。解法2:我们可以按照从1到N的顺序来验证一个数是否为质数,这样当我们验证K的时候,所有小于K的质数都已经求得。那么我们没必要验证2~sqrt(K)区间内的有没有K的因子,我们只需要验证这个区间内的所有质数中有没有K的因子。解法3:筛选法,先假设所有数都是质数,然后从2开始筛掉所有2的倍数,然后从没被筛掉的第一个数开始,继续筛选。每一个数被筛选了X次,X为它的质因子数目-2。解法4:筛选法,在上述筛选法中每一个数被筛选了X次。例如6,它被2和3各筛选了1次。如何避免这种重复筛选呢?我们可以把一个合数分解为a×p,p为a 阅读全文

posted @ 2013-04-15 13:24 十指之间 阅读(1686) 评论(0) 推荐(0) 编辑

2013年4月1日

递归中隐藏的陷阱 stack overflow

摘要: 在设计程序的时候我们常常使用递归函数,它常常能够使我们的代码简洁明了。但是,这其中也隐藏着一个陷阱——那就是递归深度是有限制的,这点非常容易被初学者忽略。 我们知道函数的每一次调用,参数和返回地址都要入栈,其实函数中的局部变量也是要占用栈空间的(不信可以在函数体内声明一个1000000大小的数组,运行程序直接崩溃,如果把他改成全局变量就没事了)。而栈空间又是比较小的(相对于堆),因此我们的程序如果执行了一个很深的递归调用,就有可能发生stack overflow这样的错误。初学ACM的同学可能会经常发现自己的程序runtime error了,但是又没有数组越界访问,一种很有可能的原因... 阅读全文

posted @ 2013-04-01 21:19 十指之间 阅读(2637) 评论(0) 推荐(1) 编辑

2013年3月22日

POJ 1496 Word Index map超时分析

摘要: 题意:大约是就按照下面的方式给字符串编号,然后给你一个字符串让你输出它的编号。a -> 1b -> 2. .z -> 26ab -> 27ac -> 28. .az -> 51bc -> 52. .vwxyz -> 83681解法:没有想到很好的解法,所以就枚举了。因为解的范围并不大,最多83681。而且每一步的代价并不大:3个步骤:保存结果,自加,进位。发现问题:保存结果很自然想到的是用map<string,int>,因为这样的话就可以在O(lg(n))的复杂度下找到结果。但是,这样做的结果超时了。后来改成保存在数组里,这样查找一个 阅读全文

posted @ 2013-03-22 22:38 十指之间 阅读(520) 评论(0) 推荐(0) 编辑

导航