天天看點

【47】求1+2+3+...+n

【47】求1+2+3+…+n

  • 時間限制:1秒
  • 空間限制:32768K

題目描述

求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、

case等關鍵字及條件判斷語句(A?B:C)。

牛客網題目練級點選這裡

發散思維
**************************************************************/
#include<iostream>
using namespace std; 

//方法一: 用類的靜态成員和構造函數
class Temp{
public:
    Temp(){ ++N; Sum+=N;}

    static void Reset(){N=; Sum=;}
    static unsigned int GetSum(){ return Sum;}
private:
    static unsigned int N;
    static unsigned int Sum;
};

unsigned int Temp::N=;  //靜态資料成員在類外進行一次初始化
unsigned int Temp::Sum=;

class Solution {
public:
    int Sum_Solution(int n) {
        Temp::Reset(); //可以用類對靜态函數進行直接調用。初始化。

        Temp* a=new Temp[n]; //建立n個類,每個類調用一次構造函數
        delete[] a;   //銷毀指針數組空間。
        a=NULL;

        return Temp::GetSum(); //傳回靜态成員結果
    }
};
           

知識點:

靜态成員

  • 不可在類體内進行指派,因為它是被所有該類的對象所共享的。
  • 你在一個對象裡給它指派,其他對象裡的該成員也會發生變化。為了避免混亂,是以不可在類體内進行指派。
  • 靜态資料成員不能在類中初始化.因為靜态資料成員為類的各個對象共享,否則每次建立一個類的對象則靜态資料成員都要被重新初始化。它在對象中不占用存儲空間,這個屬性為整個類所共有,不屬于任何一個具體對象。
  • 靜态成員的值對所有的對象是一樣的。靜态成員可以被初始化,但隻能在類體外進行初始化。
  • 各個對象都擁有類中每一個普通資料成員的副本,但靜态資料成員隻有一個執行個體存在,與定義了多少類對象無關。

    靜态函數成員

  • 必須通過對象名來通路非靜态資料成員。
  • 另外,靜态成員函數在類外實作時候無須加static關鍵字,否則是錯誤的。
    • 非靜态成員函數可以任意地通路靜态成員函數和靜态資料成員。

      http://blog.csdn.net/clc4210408/article/details/6775824

      虛函數繼承在記憶體中詳解:

      http://www.cnblogs.com/jerry19880126/p/3616999.html

牛客網通過圖檔

【47】求1+2+3+...+n
【47】求1+2+3+...+n

繼續閱讀