01_求1+2+3+...+n(要求不能使用乘除法等)

题目描述

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

题解1

使用静态成员:

1.设置静态成员变量_i和_sum,在构造函数中进行累加运算。

2.创建一个大小为n的对象数组,在创建的时候会自动调用n次构造函数,即实现了n次累加运算。

3.注意在每次获取到_sum的值后,要将_i和_sum的值复原,不然会出错。

class Sum{
     
public:
    Sum(){
     
        _sum+=_i;
        ++_i;
    }
    static int GetSum(){
     
        int sum=_sum;
        _i=1;
        _sum=0;
        return sum;
    }
    
private:
    static int _i;
    static int _sum;
};
int Sum::_i=1;
int Sum::_sum=0;

class Solution {
     
public:
    int Sum_Solution(int n) {
     
    	//Sum arr[n];   //VS环境下会报错
        Sum* p = new Sum[n];  //创建一个类对象的数组,会调用n次构造函数
        return Sum::GetSum();
    }
};

题解2

使用递归:

1.由于不能使用if语句来终止递归,所以想到用逻辑与&&来进行判断。

2.A&&B,表示如果A成立则执行B,否则不执行。可以这样来判断,当n>1时,执行递归函数。

class Solution{
     
public:
    int Sum_Solution(int n){
     
        //if(n==1) return n;
        //return n+Sum_Solution(n-1);
        bool x=n>1 && (n+=Sum_Solution(n-1));
        return n;
    }
};

你可能感兴趣的:(力扣/牛客,c++,leetcode)