二进制中1的个数 &数值的整数次方&调整数组顺序使奇数位于偶数前面
题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
- 将n与n-1相与会把n的最右边的1去掉,如1100&1011=1000,再让num++即可计算出有多少个1
int NumberOf1(int n) {
int num = 0;
while(n)
{
n = n&(n-1);
num++;
}
return num;
}
题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
double Power(double base, int exponent) {
double sum = 1.0;
int flag = 0;//标记
if(exponent < 0)
{
flag = 1;
exponent = -exponent;
}
for(int i = 1; i <= exponent; i++)
{
sum = sum * base;
}
if(flag == 0)
return sum;
else
return 1/sum;
}
题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
void reOrderArray(vector<int> &array) {
vector<int>::iterator iter;
vector<int> temp;
//将array中的偶数删除,放入temp中,相对顺序不变的
for(iter = array.begin(); iter!=array.end();)
{
if((*iter)%2==0)
{
temp.push_back(*iter);
iter = array.erase(iter);
}
else
iter++;
}
//将temp中的元素,放入array的后面
for(iter=temp.begin(); iter!=temp.end(); iter++)
{
array.push_back(*iter);
}
}