剑指offer-前n项求和(不准使用基本语句)

求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的成员变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值