求1+2+3+...+n(37)

題目

【求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)】


1、分析
可以通過將累加的方法放在類的構造函數中,然後創建類的n個對象,則會調用n次構造函數,從而實現了累加求和。
注意:

  • 類的靜態成員變量和靜態成員函數在類中只有一份,爲類的所有對象所共有。
  • 類的靜態成員是屬於類的,而非某一個對象,所以調用類的靜態成員可以直接用類名::靜態成員
  • 類的靜態成員函數不可以調用類的非靜態成員;而類的非靜態成員函數則可以調用類的靜態成員
  • 類的靜態成員變量只能在類中聲明,在類外進行定義或初始化
    2、代碼
class Temp{
public:
    Temp()
    {
        n++;
        sum+=n;
    }
    static int GetSum(){return sum;}
    static void ResetNum()
    {
        n=0;
        sum=0;
    }
private:
    //類的靜態成員只能在類中聲明,而不能在類中定義
    static int n, sum;
};
// 類的靜態成員必須在類外定義
int Temp::n=0;
int Temp::sum=0;

class Solution {
public:
    int Sum_Solution(int n) {
        Temp::ResetNum();
        //創建類的n個對象,從而實現調用類的構造函數n次
        Temp *p=new Temp[n];
        delete[] p;
        p=nullptr;
        return Temp::GetSum();
    }
};

2、方法二
利用邏輯與運算

class Solution {
public:
    int sumNums(int n) {
        int res=n;
        res && (res+=sumNums(n-1));//res=0時,後面的部分將不再運算
        return res;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章