首页 > 代码库 > 剑指offer (46) 求1+2+3+...+n

剑指offer (46) 求1+2+3+...+n

题目:求1+2+3...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句

 

题解分析:

不能使用乘除法,也就不能使用 n(n+1)/ 2公式了

不能使用for while 也就不能使用循环之类的

 

利用构造函数求解:

循环只是让相同代码重复执行n遍,我们可以定义一个类型,然后创建n个该类型的实例,这时类的构造函数一定会重复执行n次

我们在类的构造函数中进行n次累加

注意:参与累加的成员变量应为static,因为是每个类独属一份,而不是每个实例

class Temp {    public:        Temp() {            sum += i;            ++i;        }        static int GetSum() {            return sum;        }    private:        static int sum;        static int i;};int Temp::sum = 0;int Temp::i = 1;int Sum(int n) {    Temp* a = new Temp[n];    int result = Temp::GetSum();    delete []a;    a = NULL;    return result;}