POJ 1003 Hangover

这又是一个破水题。涉及到小学四年级的知识。

原题地址:http://poj.org/problem?id=1003

阅读全文

POJ 1002 487-3279

做生意的人喜欢易于记忆的电话号码。一种让电话号码好记的方法,就是把它“拼写”成一个好记的词语或者短语。例如,你可以把滑铁卢大学 (University of Waterloo) 的电话记为 TUT-GLOP(译注:大家不妨看看手机键盘,就知道电话是多少了)。当然了,有的时候,一个电话也可以只有一部分是单词(译注:其余的是数字)。当你今晚回到旅馆的时候,你可以从 Gino's 订一份披萨外卖,他们的电话是 310-GINO. 另一种让电话号码好记的方法是,把电话中的数字分成好记的几组。比如你可以从必胜客 (Pizza Hut) 订一份外卖,他们的电话是“3 个 10”,3-10-10-10.

阅读全文

POJ 1001 Exponentiation

这个题目是要我们写高精度乘方。Java 的同学有福了,因为 BigDecimal 类可以帮助我们。但是使用其它语言的同学,嘿嘿……

涉及大数量 (large magnitude) 和高精度 (large/high precision) 的精确值 (exact value) 计算的问题是很常见的。例如,对于很多计算机系统来说,国债 (national debt) 相关问题的计算是一个繁重的任务 (taxing experience).

阅读全文

为什么 C++ 中提倡尽量避免使用 #define

C++ 的书上常说,尽量不要用 #define 来定义常量。这究竟是为什么呢?

其实 C++ 并不仅仅不提倡用宏来定义常量,而且还不提倡用宏来定义“函数”。事实上 C++ 并不是很喜欢预处理宏,在很多很多方面,如果不是必需,尽量不要使用预处理宏。

为什么 C++ 不喜欢预处理宏?

首先,预处理宏是“全局”的。所以,在 C++ 这样如此强调命名空间、类这样的东西的语言中,全局的东西真是越少越好。但是其实预处理宏的全局并不是语义上的全局,之所以叫预处理宏,是因为预处理宏会在编译器编译代码之前被简单地替换成代码

阅读全文

有关 C++ 对象创建时的返回值的一些探讨

我一直有这样一种观点,C++ 中的引用返回,只适合返回已经存在了的对象的引用。如果想要返回一个在函数中新建的对象的引用,则是有问题的:因为这个新建对象要么放在堆中,要么放在栈中;若是放在了栈中,函数返回的时候,对象就被销毁了,这样的话,返回的引用也就失效了;若是放在堆中,返回的引用虽然是正确的,但是由于“引用”只是另一种形式的“指针”,所以即使引用的生命周期结束了,对象还是在堆里没有得到释放。

基于以上观点,我就觉得,如果想让函数创建一个对象,那么我们应该让函数返回对象的指针,或者直接返回对象本身。然后问题又来了,如果我们的程序里用到了指针,就不是很好看了。而且我们也不想整天记着去销毁这些对象,一疏忽,内存就泄露了。所以我还是偏好返回对象本身。

但是,返回对象本身就有效率问题了:对象在函数里,需要用到构造函数,在对象的构造和处理之后,返回这个对象,当赋值操作进行的时候,是否需要使用复制构造函数,或者需要等号运算符呢?如果需要的话,那临时变量又要销毁,这样一创建再销毁,不是浪费了吗?编译器能不能让函数直接在这个要赋值的空间上进行操作呢?

阅读全文

记一次 Nginx 安装编译过程

最近开始折腾 Nginx, 我想自己编译它来搭建一个服务器。

我使用的系统是 CentOS, 也就是说很多风格会与 Red Hat 很像。所以安装命令是 yum 而不是 Ubuntu 那些 Debian 系统的 apt-get. 编译之前需要安装一些东西,它们是 gcc, pcre, zlib, openssl, libxml2, libxslt, gd, GeoIP. 由于我想让 Nginx 有尽量多的功能,所以才要安装 libxml2, libxslt, gd, GeoIP 之类的东西。

首先 gcc 是 GNU Compiler Collection, 编译 Nginx 必须要用这个编译器。然后 pcre 全称是 Perl Compatible Regular Expression, Nginx 解析 URL 的时候需要用到。zlib 是 Nginx 用来压缩数据的。openssl 是 Open Secure Socket Layer. gd 是一个处理图像的库。而 GeoIP 似乎可以用来查询 IP 的地理位置。

取得管理员权限后,运行:

1
2
3
4
5
6
7
yum install gcc
yum install pcre pcre-devel
yum install zlib zlib-devel
yum install openssl openssl-devel
yum install libxml2 libxml2-devel libxslt libxslt-devel
yum install gd gd-devel
yum install GeoIP GeoIP-devel

阅读全文