10 2012 档案
摘要:来自《编程之美》的关于阶乘的题目: 1.给定一个整数N,那么N的阶乘N!末尾有多少个0呢?例如:N = 10, N! = 3628800,N!的末尾有两个0 2.求N!的二进制表示中最低位1的位置。这两道题的解法类似,先分析第二道题。 要求得N!的二进制表示中最低位1的位置,可将N!循环右移,直到无法被2整除为止,右移的次数即为最低位1之前0的个数,因此最低位1的位置就等于(右移次数 + 1)。 即若N = 0011(3),则 N! = 0110(6),那么N! / 2 = 0011奇数,无法继续被2整除,因此N!可右移一次,最低位1的位置等于 1 + 1 = 2(第二位) 所以该问...
阅读全文
摘要:题目出至结构之法博客——微软一百题。定义栈的数据结构,添加一个min函数,能够得到栈的最小元素。要求函数min, push以及pop的时间复杂度都是O(1)。由于要使得min函数的时间复杂度为O(1),那么就不能通过遍历O(n)来求最小值。可以通过在push阶段就确定最小值,使用min函数直接返回该值,就能够使得min函数的复杂度为O(1)。#include<stdio.h>#include<stdlib.h>#define STACK_INIT_SIZE 100 //存储空间初始分配量#define STACKINCREMENT 10 //存储空间分配增量typede
阅读全文

浙公网安备 33010602011771号