《剑指offer》求1+2+3+...+n

来源:互联网 发布:渭南网络电视台 编辑:程序博客网 时间:2024/04/30 01:18

【 声明:版权所有,转载请标明出处,请勿用于商业用途。  联系信箱:libin493073668@sina.com】


题目链接:http://www.nowcoder.com/practice/7a0da8fc483247ff8800059e12d7caf1?rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking


题目描述
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

思路
这道题初看起来貌似并想不到什么太好的方法,但是如果我们熟悉C++的特性,或者对递归比较了解的话,还是能找到一些解决的方法

1.使用递归

class Solution{public:int Sum_Solution(int n){int sum = n;bool flag = (n>0) && ((sum+=Sum_Solution(n-1))>0);return sum;}};

2.构造函数

class Temp{    public:        Temp()        {            ++N;            Sum+=N;        }        static void Reset()        {            N = Sum = 0;        }        static int GetSum()        {            return Sum;        }    private:        static int N;        static int Sum;}; int Temp::N = 0;int Temp::Sum = 0; class Solution{    public:        int Sum_Solution(int n)        {            Temp::Reset();            Temp *a = new Temp[n];            delete []a;            a = NULL;            return Temp::GetSum();        }};

3.虚函数

class A;A* Array[2]; class A{    public:        virtual int Sum(int n)        {            return 0;        }}; class B:public A{    public:        virtual int Sum(int n)        {            return Array[!!n]->Sum(n-1)+n;        }}; class Solution{    public:        int Sum_Solution(int n)        {            A a;            B b;            Array[0] = &a;            Array[1] = &b;            return Array[1]->Sum(n);        }};


0 0
原创粉丝点击