sunmoon1997
发表于 2004-11-16 17:37:21
这个是必要的。 不过只要 *l_data.charse != ‘\0’ 就够了, 可以不用去调用一个函数的。
cjacker
发表于 2004-11-16 17:37:33
哥们,看来咱们两对C/C++,汇编的理解还是不够啊
呵呵,难免的错误。谁又敢说自己精通C/C++啊。(不过有些丢人了:-()
另,这个地方的代码没有必要用strlen。:-)
if (l_data.charset != NULL && strlen(l_data.charset) > 0) {
+ strcat(lang_string, ".");
+ strcat(lang_string, l_data.charset);
+ }
其实整个lang_string全是调试用的,可以不加。
这一段我还没看到过。
cjacker
发表于 2004-11-16 17:44:34
说到算法了,我出到小题,比较有意思的一个题目:
判断一个自然数数是不是2的N次方。
不要查任何东西,直接写,写出自己认为最优的算法。
这可是考查基础的题目,每次面试必用,百发百中。
nzinfo
发表于 2004-11-16 17:56:07
1 lang-string 不是必要的。在新版的wine里已经不用了
2 关于2的N次方,只需要做位移就可以了。具体如何实现,还需要再考虑。目前想到的算法判断太多。
caihua
发表于 2004-11-16 17:57:55
:roll: 又是程序的说?头晕啊,幸亏不是搞计算机的
sunmoon1997
发表于 2004-11-16 17:58:25
只想到这个:
int i;
for (i = 0; i < sizeof(int)*8;i ++) {
if (num & 1 << i) {
print("num 是 2 的 %d 方", i);
break;
}
}
if (i == sizeof(int)*8)
printf ('num 不是2的N次方");
cjacker
发表于 2004-11-16 18:06:03
注意,一行,呵呵
nzinfo
发表于 2004-11-16 18:10:18
可以把int 分成几个byte,分别与数相作用,只要结果中有超过两个不为0,则定不可除。
然后再比较不为0的字节。
这样可以省去一些比较。但是不一定比sunmoon1997兄的效率更高。
caihua
发表于 2004-11-16 18:11:02
:mrgreen: 一行?可以
计算机,来啊,判断一个自然数数是不是2的N次方。直接写,写出自己认为最优的算法
一行,完毕 :mrgreen:
jiangtao9999
发表于 2004-11-16 18:18:29
如果是 2 的 N 次方,那么他的 2 进制数只有一个 1 ,之后怎么判定就不会了……… :oops:
nzinfo
发表于 2004-11-16 18:20:33
最简单的算法
是2的N次方吗(number);
呵呵,C里是不是这么写不清楚了。如果是使用位操作技巧可能可以写在一行里,但是失去了可读性了(至少还需要写条注释):-)
所以,还不如用语言或库函数提供的特性了。
jiangtao9999
发表于 2004-11-16 18:21:01
?!
把这个数取 2 的余数不就完了?
如果余数是0,就是 2 的 N 次方~~~
if ( num % 2 ) printf("不是2的N次方");
elseprintf("是2的N次方");
nzinfo
发表于 2004-11-16 18:23:03
?!
把这个数取 2 的余数不就完了?
如果余数是0,就是 2 的 N 次方~~~
不对, 和我一样绕进去了
例如10
sunmoon1997
发表于 2004-11-16 18:25:13
取余同样也是用移位实现的吧。
jiangtao9999
发表于 2004-11-16 18:26:38
10 %2 是多少?
好像应该叫取模?