摘要: 问题:给定一个十进制正整数N,写下从1开始,到N的所有整数,然后数一下其中出现的所有“1”的个数f(N)。 书上给的最优解,考虑十进制表示的每一位,对于0,1,其他这三种情况分开讨论,然后结合高位数字、当前位数字、低位数字计算。 我想到的是另一个解法,时间复杂度一样,但思路更简单一些: 1 2 3 阅读全文
posted @ 2020-07-05 22:04 Xrst 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 公式中的N是自然数,除法是整数除法(向下取整)。 这个公式是从《编程之美》阶乘一章摘来的,除了硬算之外,里面给出了另一个答案:X=N-(N的二进制表示中1的数目)。 但是书中用11011为例证明这个结论太复杂了,看不懂,我想了另外一个解读: N = (N的二进制最低位 + N/2) + N/2 = 阅读全文
posted @ 2020-07-05 19:43 Xrst 阅读(1086) 评论(0) 推荐(0) 编辑
摘要: 刚毕业找工作面试遇到这个问题,正确答案是“不一定,与编译器相关”。这个结论是我在工作多年后才知道的。 C/C++标准中列出了三种类型:(plain) char, signed char 和 unsigned char。第一种就是普通的char不加前缀,实际对应后两种实现的其中一种,取决于编译器,有的 阅读全文
posted @ 2020-07-05 17:18 Xrst 阅读(1932) 评论(0) 推荐(0) 编辑