1、 对任意输入的正整数N,编写C程序求N!的尾部连续0的个数,并指出计算复杂度。如:18!=6402373705728000,尾部连续0的个数是3。(不用考虑数值超出计算机整数界限的问题)
思路:就是求N中5的个数
解答:
int num;//结尾0的个数
num=0;
while(N)
{
num+=N/5;
N/=5;
}
2、请实现两棵树是否相等的比较,相等返回1,否则返回其他值,并说明算法复杂度。
数据结构为:
typedef struct_TreeNode{
char c;
TreeNode *leftchild;
TreeNode *rightchild;
}TreeNode;
函数接口为:int CompTree(TreeNode* tree1,TreeNode* tree2);
注:A、B两棵树相等当且仅当Root->c==RootB-->c,而且A和B的左右子树相等或者左右互换相等。
解答:
int CompTree(TreeNode* tree1,TreeNode* tree2){
if(!tree1&&!tree2) return 1;
else if((tree1->c==tree2->c)&&(CompTree(tree1->leftchild,tree2->leftchild)&&(CompTree(tree1->rightchild,tree2->rightchild))) return 1;
else return 0;
}
3、已知一个字串由GBK汉字和ansi编码的数字字母混合组成,编写c语言函数实现从中去掉所有ansi编码的字母和数字(包括大小写),要求在原字串上返回结果。
函数接口为:int filter_ansi(char* gbk_string)
注:汉字的GBK编码范围是0x8140-0xFEFE
|
这是个编码问题,你可以查看下
编码名称 第一字节 第二字节
gb2312 0xB0-0xF7 0xA0-0xFE
GBK 0x81-0xFE 0x40-0xFE
BIG5 0x81-0xFE 0x40-0x7E or 0xA1--xFE
我这里简单起见,就直接用第一个字节的高位为1了....
如果没记错的话,全角输入的汉字,符号都是高位为1。如这里的(,。)
*tmp&0x80 是为了确定*tmp最高位是否为1