笔试编程三

来源:互联网 发布:如何申请淘宝店铺 编辑:程序博客网 时间:2024/06/16 23:22

1.编写函数,实现字符串逆序。

char *ptr = “abcdefg”;

int size = strlen(ptr);

char *str = new char[size+1];

int i = 0,j=size-1;

for(i = 0;i<size+1;i++,j--)

str[i] = ptr[j];

cout<<str<<endl;

delete str;

2.通过编程实现输出2 的1000次方。

#define Max 1000

double a[400] = {2};

int i = 0,j = 0;

for(i = 0 ; i < Max; i++)

{

for(j = 0; j < 400 ; j++)

{

if(a[j] < 5)

{

a[j]=a[j]*2; //不产生进位

}

else

{

a[j]=a[j]*2-10;

a[j+1]=a[j+1]+0.5;  //注意,此处加上0.5,所以定义数组时为double型,下一位*2时正好是进位加1

}

}

}

cout<<”2^1000 = ”;

for(i = 399 ; i >=0 ; i--)

{

cout<<a[i];  //数组逆序输出

}

3、用c++写个程序,如何判断一个操作系统是16位还是32位的?不能用sizeof()函数。

int main()

{

int i = 65536;  //65536二进制是1 0000 0000 0000 0000

int j = 65535;  //65535二进制是  1111 1111 1111 1111

cout<<i<<endl; //16位输出0  ,32位输出65536

cout<<j<<endl; //16位输出-1,  32位输出65535

}

因为数值在计算机中都是以二进制补码存储的,65536的二进制在16位下溢出一位,所以只有后面16位为0,而在32位下不会溢出输出65536.

65535二进制在16位只有16位,最高位1是符号位表示负数,1111 1111 1111 1111是补码,他的原码是-1取反,求得为1000 0000 0000 0001 = -1;所以16位下输出-1。而32位下他是正数,所以原码补码反码一样,输出65535.

4、输入一颗二叉树的根节点,求该树的深度。从根节点到叶子结点一次经过的结点形成树的一条路径,最长路径的长度为树的深度。根结点的深度为1。

int TreeDepth(strcut  BinaryTreeNode *pRoot)

{

if(pRoot == NULL)

return 0;

int numLeft = TreeDepth(pRoot->left);

        int numRight = TreeDepth(pRoot->right);


return (numLeft > numRight)?(numLeft +1);

}