微软编程

二进制数中的1的个数:

利用位运算:

int count(int v)

{

int num;

while(V)

{

num=v&0x01;

v>>=1;

}

return num;

}

计算N!末尾零的个数:

3.给定一个整数N,计算1的个数:

int count(int n)

{

int index=1;//位数

int cur=0;

int lower=higher=0;

while(n/index!=0)

{

low=n-(n/index)*index;

curr=(n/index)%10;

high=n/(index*10);

switch(cur)

{

case 0:

   count+=high*index;

break;

case 1:

  count+=high*index+low+1;

break;

default:

 count+=(high+1)*index;

break;

}

index*=10;

}

return count;

}

4.最小的K个数:

利用快速排序来做;

void getleastNnmber(int *input,int n,int*output,int k)

{

if(input==NULL||output==NULL||n<=0||lk<=0||k>n)

return ;

int start=0;

int end=n-1;

int index=partion(input,n,start,end);

while(index!=k-1)

{

if(index>k-1)

{

end=k-1;

index=partion(input,n,start,end);

else
{

start=k+1;

index=partion(input ,n,start,end);

}

}

}

找两个数的最大公约数:

int gcd(int x,int y)

{

 return (!y)?x:gcd(y,x%y);

}

 5.快速寻找满足条件的两个数:数组中两个数字之后等于给定值:

 

posted @ 2016-08-13 15:21  maxandhchen  阅读(224)  评论(0编辑  收藏  举报