您的位置:首页 > Web前端

剑指offer(四)

2015-11-07 09:42 387 查看
1.菲波那切数列:(循环实现,非递归)

#include <iostream>
#include <algorithm>
using namespace std;
int  Feb(int n)
{
if(n==0) return 0;
if(n==1) return 1;
int sum=0,last1=0,last2=1;
for (int i=1;i<n;i++)
{
sum=last1+last2;
last2=sum;
last1=last2;
}
return sum;
}
int main()
{
int n=Feb(5);

return 0;
}
2.求一个整数如果用二进制表示,有多少个1(每次都是最右边的1为0)

#include <iostream>
#include <algorithm>
using namespace std;
int  number1(int n)
{
int count=0;
while (n)
{
count++;
n=n&(n-1);
}
return count;
}
int main()
{
int n=number1(5);

return 0;
}
3.求两个数需要改变多少位之后才会变成相同的。(先求异或,然后求1的个数)
#include <iostream>
#include <algorithm>
using namespace std;
int  number1(int n,int m)
{
int temp=n^m;
int count=0;
while (temp)
{
count++;
temp=temp&(temp-1);
}
return count;
}
int main()
{
int n=number1(10,13);

return 0;
}
4.数值的整数次方:(要考虑异常处理 0 的-1次方,这个要考虑到)

#include <iostream>
#include <algorithm>
using namespace std;
char valid=0;//异常处理
int  reslut(int base,int exp)
{
if (exp==1) return base;
int re1=reslut(base,exp>>1);
re1*=re1;
if(exp&0x1==1)
return (re1*base);
else return re1;
}
double  number1(int n,int m)
{
if(n==0&&m<0)
{
valid=1;
return 0;
}
if(m==0) return 1;
char flag=0;
if(m<0)
{
flag=1;
m=-m;
}
int re=reslut(n,m);
if(flag) return(1.0/re);
else return(re);
}
int main()
{
double n=number1(0,-5);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: