题目描述
题目描述
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
方法一:利用构造函数
public:
static int N;
static int sum;
Solution()
{
++N;
sum += N;
}
static void Reset()
{
N = 0;
sum = 0;
}
int Sum_Solution(int n) {
Reset();
Solution *p = new Solution [n];
delete [] p;
p = NULL;
return sum;
}
};
int Solution:: N = 1;
int Solution:: sum = 0;
方法二:利用 && 的截断原理
class Solution {
public:
int Sum_Solution(int n) {
int ans = n;
ans && (ans += Sum_Solution(n - 1));
return ans;
}
};
方法三:利用函数指针或者虚函数(此处写出函数指针的做法,虚函数也是一样的道理)
class Solution {
public:
int(Solution::*fun[2])(int);
Solution()
{
fun[0] = &Solution::terminal;
fun[1] = &Solution::Sum_Solution;
}
int Sum_Solution(int n)
{
//使用类成员函数指针必须有“->*”或“.*”的调用
return (this->*fun[!!n])(n - 1) + n;
}
int terminal(int N)
{
return 0;
}
};