微软编程
二进制数中的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.快速寻找满足条件的两个数:数组中两个数字之后等于给定值: