请看题目:
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
解题:
思路:
单看1+2+3+...+n,这个题是不难的,可是难就难在不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C),也就是不能使用循环和递归来解题。
那么怎么办呢? 这里提供一种方法:利用C++的函数数组,调用一个函数n次,函数内部设两个变量:_ret 和 _n ,初始值分别设为 0 和 1 ,每调用一次函数,_ret 累和,_n++ ,如此调用 n 次,不久实现 1+2+3+...+n 了吗?
代码实现:
class Sum
{
public:
Sum()
{
_ret += _n;
_n++;
}
static int GetRet() // 因 _ret 是私有,需要个取值函数来返回
{
return _ret;
}
private:
static int _n; // 静态变量,保留上次的数值
static int _ret;
};
int Sum::_ret = 0; // 类里声明,类外定义
int Sum::_n = 1;
class Solution {
public:
int Sum_Solution(int n) {
Sum a[n]; // 数组函数,调用 n 次 Sum
return Sum::GetRet();
}
};
解毕。