1、判断X是否为2^N,不能使用循环
解:2、4、8、16...对应的二进制分别为:10、100、1000、1000... 将X与(X-1)作位与运算,答案为0才是
答案:!(X&(X-1))
2、不使用if、switch、?:找出两个数中的最大值
答案:int max = (a+b+abs(a-b))/2
3、将a、b值交换,不使用中间变量
答案:a = a^b; b = a^b; a = a^b; (^:按位异或)
4、使用预处理#define声明一个常数,表示一年有多少秒
答案:#define SECOND_PER_YEAR (365*24*60*60) UL
注:考察#define结尾无分号;365*24*60*60得使用无符号长整型存储
5、写一个标准宏,返回两个参数中较小的一个
#define MIN (A, B) ( (A) <= (B) ? (A) : (B))
6、const与#define的区别
答:都可以定义常量。const有数据类型,编译器可以进行类型安全性检查;#define只进行字符串替换,无类型安全性检查
7、交换两个数
void swap(int *p, int *q)
{
int tmp;
tmp = *p;
*p = *q;
*q = tmp;
}
void swap(int &p, int &q)
{
int tmp;
tmp = p;
p = q;
q = tmp;
}
8、求N的阶乘
(1)递归
int Fact(int n)
{
if(1 == n)
return 1;
else return n * Fact(n-1);
}
(2)循环
int Fact(int n)
{
int var = 1;
while(n>0)
{
var *= n;
n --;
}
return var;
}
9、菲波那切数列
//菲波那切数列(n个)
void Fibonacci(int n)
{
int c = 0;
int a = 1, b = 1;
if(n < 2)
cout << a << endl;
if(2 == n)
cout << a << " " << b << endl;
else
{
cout << a << " " << b << " ";
for(int i=2; i<n; i++)
{
c = a + b;
cout << c << " ";
a = b;
b = c;
}
cout << endl;
}
}
高效算法与技术实践

被折叠的 条评论
为什么被折叠?



