首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

某知名数据库产品公司的两道编程题(Senior QA) (二)-年薪约16W,该怎么处理

2012-03-27 
某知名数据库产品公司的两道编程题(Senior QA) (二)-年薪约16W1.Howtocheckaintergerispowerof2,hintwithi

某知名数据库产品公司的两道编程题(Senior QA) (二)-年薪约16W
1.How   to   check   a   interger   is   power   of   2,   hint   within   one   line   code.
如何检查一个整数是2的指数,提示:只需一行代码
2.type   define   a   function   point   type   which   return   value   is   a   interger   pointer   and   parameter   are   interger   pointer   and   float   pointer
定义一个函数指针类型,函数的返回值是一个整数指针,两个参数分别是整数指针和浮点数指针
3.Read   following   code,   if   can   get   result,   please   write   out,   if   cann 't   get   result,   please   point   out   the   error,   and   make   MIN   change   to   correct   it
读如下代码,如果没错,请写出输出结果,如果有错,就作最小的改动来更正。
char*   PrintStr()
{
        char   s[64];
        strcpy(s, "Hello   world! ");
        return   s;
}
main()
{
        char   *s1=PrintStr();
        printf( "Output:%s ",s1);
}

-----原题均为英语,同样,请注意您所花的时间,以及没有google可以用。----



[解决办法]
1. if(x & (x-1) ==0),则x是2的幂
2. int* (pf)(int*,double*)
3. 这个问题已经讨论烂了,返回局部变量问题.
[解决办法]
From A_B_C_ABC:

1. if(x | (x-1) ==0),则x是2的幂
======================================
更正反而错了吧.你的第一次思路是对的. 应该用&而不是|. 另外考虑到==比位运算的优先级高,正确写法为:
if((x&(x-1))==0)

2. int* (pf)(int*,double*)
======================================
注意所需的是函数指针,而且要求 "type define ",似应为:
typedef int* (*pf)(int*,double*);

3. 这个问题已经讨论烂了,返回局部变量问题.
======================================
确实是老生常谈了,呵呵.我能想到的最小改动是用static:
char s[64];
==>
static char s[64];
[解决办法]

1. (x&x-1==0)?true:false;
2. int* (*p)(int *, double *)
3. static char s[64]

[解决办法]
(x <= 0 ? false : !(x & (x - 1)))
[解决办法]
in a word ,so easy! Tell you the truth,English,especially verbal English is the most important skills for a programmer.So you guys are supposed to learn English diligently. or you are not capable of being offered a satisfactory job. Boys and girls let us enjoy the charming of standard English.
[解决办法]
楼上好几位提到English,因此也想顺便说几句.
此题的英文总感觉有些别扭,有待改进之处:
1. "check " 后加上 "whether "比较好. "Hint within one line code "不通.
2. "which "改为 "whose "
3. "if can... if cann 't... "缺主语,也太啰嗦. 可改为 "if it can... otherwise, ... "
班门弄斧当了回英语tutor,见笑.
[解决办法]
比如X是2的N(N> 0)次幂换成2进制就是100...(N个0),而各位大哥所说的X&(X-1),中X-1就是111...(N-1)个1,相与必然等于0,而N = 0的情况根据验算符合;
假如X(X> 1)不是2的N次幂,必然在2的N次幂和2的N-1次幂之间,而2的2的N-1次幂减1后,至少最高位肯定为1,所以X&(X-1)肯定不等于0,讲的有点混乱,不过应该还是能理解.
负数情况照此分析...哎每次说话都不清不楚的,对不住了.所以多上CSDN里练习一下~
[解决办法]
某知名数据库产品公司的两道编程题(Senior QA) (二)-年薪约16W
1、How to check a integer is power of 2, hint within one line code.


如何检查一个整数是2的指数,提示:只需一行代码
2、type define a function point type which return value is a interger pointer and parameter are interger pointer and float pointer
定义一个函数指针类型,函数的返回值是一个整数指针,两个参数分别是整数指针和浮点数指针
3、Read following code, if can get result, please write out, if cann 't get result, please point out the error, and make MIN change to correct it
读如下代码,如果没错,请写出输出结果,如果有错,就作最小的改动来更正。
char* PrintStr()
{
char s[64];
strcpy(s, "Hello world! ");
return s;
}
main()
{
char *s1=PrintStr();
printf( "Output:%s ",s1);
}

-----原题均为英语,同样,请注意您所花的时间,以及没有google可以用。----

俺的解答:
第一题:请参考《Hacker’s Delight》中的Chapter 2: Basics
答案:if((x&(x-1))==0)

x&(x-1)可以把数字x的最右边的1变为0,因为2的指数次方只有一个1,所以执行x&(x-1)后,x的值变为0。if((x&(x-1))==0) 也就是判断这个数字是不是2的指数次方的最简单方法。

另外,这个公式可以用途很多。如:你可以用它来查一个整数里面1的个数。
int CountOneInNumber(unsigned int num)
{
int i;

for(i=0;num;i++)
num &= num - 1;
return i;
}
第二题:int * (*fun) (int*, double *);
咱们OURS的实现Instance的时候,就是用的函数指针。函数指针在OS层应用还是比较多的哦,是实现C语言面向对象的不可缺少的东西。
第三题:这个问题是因为char s[64];分配在栈上,在函数调用完毕后,数组所占用的内存就会被释放了。所以这里直接返回s优点问题。

解法一:利用堆来分配内存(在函数外需要释放内存)
char* PrintStr()
{
char *s = (char *)malloc(sizeof(char)*64);

if(s == NULL)
return NULL;

strcpy(s, "Hello world! ");
return s;
}
main()
{
char *s1=PrintStr();
printf( "Output:%s ",s1);
}
解法二:把那个数组变为全局数组
俺觉得这个办法改动最小,但是最损,最没水平。
char s[64];
char* PrintStr()
{
strcpy(s, "Hello world! ");
return s;
}
main()
{
char *s1=PrintStr();
printf( "Output:%s ",s1);
}

[解决办法]
knight730()
int CountOneInNumber(unsigned int num)
{
int i;

for(i=0;num;i++)
num &= num - 1;
return i;
}
===================
for里面的num怎么回事?

/******************************************************************/

这个for循环的结束条件是num == 0 的时候。
也可以这样写:
int CountOneInNumber(unsigned int num)
{
int count=0;

while(num)
{
num &= num - 1;
count++;
}

return count;
}
[解决办法]
congratulation!!


热点排行