0%

两个正整数x、y,x是y的倍数,不用除法运算符实现x / y。

1、最简单的方法

循环用x减y,知道x等于0。

int Div( int x, int y )
{
    int result = 0;

    while ( x > y )
    {
        x -= y;
        result++;
    }

    return result;
}

时间复杂度O(n)

Read more »

1.Reflect

对于WM_NOTIFY消息:

子控件没有Reflect,则由父窗口处理。
只要子控件(即消息对应最直接的控件)有了ON_NOTIFY_REFLECT就会被子控件处理,不会被父窗口所处理。

Reflect的意思就是把消息反射给子控件处理。

大概的就是这样:

子控件有ON_NOTIFY_REFLECT 父窗口有ON_NOTIFY 效果
WM_NOTIFY未被处理 WM_NOTIFY只被父窗口处理 WM_NOTIFY只被子控件处理
Y Y WM_NOTIFY只被子控件处理
Read more »

终于把Micolog搞到墙内了!

用chrome打开速度很理想!

稍微修改一下Windows Live Writer的设置也能直接连到博客了!

=======================兴奋的分割线===============================

具体方法参考了:http://gae.v2find.tk/2011/06/23/micolog-gae-tk.html

但由于dot.tk对免费域名有限制:

在90天内少于25名用户访问时,免费域名会过期。

所以我改在[co.cc](a href=”http://www.co.cc/")申请免费域名。

操作跟dot.tk的对应,只是每次修改设置(如修改dns服务器)时并不一定立刻就生效,它也说了最多会在48小时内生效。

其他都按照链接的方法做就OK了。

自产生程序:不通过任何输入,输出自己代码的程序。

很多语言都可以写出这样的程序。

C版本(只有一行):

char s[] = "char s[] = %c%s%c;int main(){ printf(s, 34, s, 34);return 0;}";int main(){ printf(s, 34, s, 34);return 0;}

虽然是写出来了,但里面还是有很多值得研究的东西的。

参考资料:http://www.nyx.net/~gthompso/quine.htm

经典的解法1:

a += b; // a变成a+b
b = a – b;  // b变成原来的a,因为a+b-b = a
a –= b; // a变成原来的b,因为a+b-a = b

存在的问题:

a+b太大的话会溢出

经典的解法2:

a ^= b; // a变成a^b
b ^= a; // b变成原来的a,因为b^(a^b) = a
a ^= b; // a变成原来的b,因为a^(a^b) = b

存在的问题:

a、b的值不能超过对方的位数所能表达的范围.

如下面这种情况就会出问题:

int a = 0x10101010; // 设此时int为4个字节
short b = 0x15;

这个问题已经老生常谈了,不过今天还是遇到一个问题:

当两个要交换的数其实是同一个变量(更准确的说是同一个内存)时两种解法都会出错,变量被置0。

原因自己推算即可得出。

所以,我觉得更为保险的方法就是在交换之前先判断a、b是否相等,就既提高效率又防止出错。