劍指Offer: 求1+2+3+...+n

求1+2+3+…+n


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


1、n次調用構造函數,對靜態成員進行操作。
2、遞歸寫法,根據&&短路使得遞歸結束。
3、不要懷疑自己對構造不理解,而是這裏他確實有問題,對於已經初始化的靜態成員,他變化不可控,因此我們需要在程序中對他再次進行初始化。這可能是他別的原因造成的。


class Sum{
public:
    Sum(){
        ++i;
        sum+=i;
    }
    static int getSum(int n);
private:
    static int sum;
    static int i; 
};
int Sum::sum=0;
int Sum::i=0;
int Sum::getSum(int n){
    sum=i=0;
    vector<Sum> vs(n);//n次調用構造函數
    return sum;
}

class Solution {
public:
    int Sum_Solution(int n) {
        int res=n;
        res&&(res+=Sum_Solution(n-1));//&&短路性質,遞歸結束
        return res;
//        return Sum::getSum(n);
    }
};

另外的奇思妙想:將計算交給別的函數

        char a[n][n+1];//支持不確定下標值
        return sizeof(a)>>1;

還有(pow(n,2)+n)>>1求取的。雖然不太符合原意,但是在一定程度上打開了思維。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章