剑指offer——求1+2+3+....+n!
题目描述:求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
class Solution {
public:
//递归方法
int Sum_Solution(int n) {
int ans = n;
ans && (ans += Sum_Solution(n - 1));
return ans;
}
//非递归方法
int Sum_Solution2(int n) {
bool a[n][n+1];
return sizeof(a)>>1;
}
};
//比较新颖的想法
typedef int (*func)( int );
class Solution {
public:
static int Solution1(int n )
{ return 0;}
static int Sum_Solution(int n) {
static func f[2] = {Solution1,Sum_Solution};
return n+f[!!n](n-1);
}
};
class Tmp
{
public:
Tmp()
{
++N;
Sum+=N;
}
static void Reset(){N = 0; Sum = 0;}
static unsigned int GetSum() {return Sum;}
private:
static unsigned int N ;
static unsigned int Sum;
};
unsigned int Tmp::N = 0;
unsigned int Tmp::Sum = 0;
class Solution
{
public:
friend class Tmp;
public:
int Sum_Solution(int n)
{
Tmp::Reset();
Tmp *a = new Tmp[n];
delete[] a;
a = NULL;
return Tmp::GetSum();
}
};
天上我才必有用,千金散尽还复来!