求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)
链接: link.
解题:构造函数+static修饰的变量+内部类,这个方法算是最容易理解的。
使用到了①对象被创建的时候构造函数会自动调用的特性②static修饰的类的成员变量,属于整个类,且每次调用都会是那同一个变量上做累加③内部类简化了代码的过程
class Solution {
class Sum//Sum 是Solution的内部类,也就天生是solution的友元类
{
public:
Sum()
{
_ret += _i;
_i++;
}
};
public:
int Sum_Solution(int n) {
_i = 1;//这个函数可能会被调用多次,且第一次调用完以后对对二次在调用是有影响的,所以还得初始化,否则这里就不是_i从1,_ret从0开始了
_ret = 0;
Sum arr[n];
return _ret;
}
private:
static int _i;
static int _ret;
};
int Solution::_i = 1;
int Solution::_ret = 0;
对于内部类Sum可以直接的使用Solution类的成员变量,但是如果把_i 、_ret设置为Sum的private成员,那么Solution是不能去访问的,并且Solution自己也是要使用这两个变量的,所以直接设置为Solution的成员变量。