(重要)劍指offer 46 求1 2 N

2021-07-03 12:20:15 字數 1098 閱讀 8469

題目:求1+2..+n,要求不能使用乘除法、for/while/if/else/switch/case等關鍵字及條件判斷語句(a?b:c)

方法1: 利用建構函式,static ,構造n個例項。

方法2:利用虛函式求解。當n不為0時,呼叫函式base::sum() ,當n為0時,呼叫函式derived::sum()

方法3:利用函式指標求解。類似虛函式

方法4:利用模板型別求解

#includeusing namespace std;

//利用建構函式

class temp

static void reset()

static unsigned int getsum()

private:

static unsigned int n;

static unsigned int sum;

};unsigned int temp::n=0;

unsigned int temp::sum=0;

int sum_solution1(unsigned int n)

//利用虛函式求解

class base

} ;base *array[2];

class derived : public base

};int sum_solution2(unsigned int n)

//方法3:利用函式指標求解

typedef unsigned int (*fun)(unsigned int);

unsigned int sum_solution3_terminator(unsigned int n)

unsigned int sum_solution3(unsigned int n)

; return n+f[!!n](n-1);

}//方法4:利用模板型別求解

templatestruct sum_solution4;};

template<> struct sum_solution4<1>;};

template<> struct sum_solution4<0>;};

int main()

劍指offer 面試題46 求1 2 n

題目 求1 2 n,要求不能使用乘除法 for while if else switch case等關鍵字及條件判斷語句 a?b c 方法一 利用建構函式求解。程式不讓使用迴圈,但是我們可以以另一種方式實現迴圈,譬如利用建構函式,不斷的呼叫建構函式,函式的執行語句放在建構函式內部,當我們建立n個類的...

劍指offer 學習筆記 求1 2 n

面試題64 求1 2 n。不能用乘除法 for while if else switch case等關鍵字及條件判斷語句 包括a?b c 法一 建構函式求解。迴圈讓相同的 迴圈執行n次,我們也可以不用迴圈語句完成,先定義乙個型別,接著建立n個該型別的物件,那麼這個型別的建構函式就會被呼叫n次 inc...

劍指offer刷題 求1 2 n

題目 求1 2 n,要求不能使用乘除法,for while if else switch case等關鍵字及條件判斷語句 a?b c 要求不能使用乘除和一些語句,因此我們可以設計遞迴思路,並且用位運算子來判斷是否到達遞迴終止的條件。另外,我們可以用c 建構函式來設計出一種思路,具體見 class s...