題目描述:
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(a?b:c)。
解題思路:
1)利用&&的短路特性
2) 利用sizeof特性,使用公式n(n+1)/2
3)利用建構函式求解:
先定義乙個型別,然後建立n個該型別的例項,那麼這個型別的建構函式將被呼叫n次。將累加的**放到建構函式中。
4)利用虛函式求解:
測試用例:
1) 邊界值:(輸入0和1)
2) 功能測試(n=5,n=10)
**:
1)&&的短路特性 複雜度:o(n)
1view code1class
solution 88
};910 code01
缺點:遞迴的層數不能太深<3000
2)sizeof特性,使用公式n(n+1)/2
1code021class
solution
88 };
3) 利用建構函式
1code03class
unit
4static
void reset() //
static
5static unsigned int getsum() //
static
6private:7
static unsigned intn;8
static unsigned int
sum;9};
1011 unsigned int unit::n = 0; //
一般在類外初始化(類內也不會報錯)
12 unsigned int unit::sum = 0; //
類外不用在加static
1314
class
solution
24 };
注意:「1」區域性static物件在第一次使用前分配,在程式結束是銷毀。並不是在區域性作用域結束是銷毀。
「2」動態分配的物件的生存期與它們在**建立是無關的,只有當顯式地被釋放時,這些物件才會銷毀。(即必須被顯示銷毀!!區域性作用域並不會自動銷毀)
「3」靜態記憶體:用來保護區域性static物件、類static資料成員、以及定義在任何函式外的變數。編譯器建立,程式結束時銷毀(不受區域性作用域控制)。
棧記憶體:用於儲存定義在函式內的非static物件。僅在定義的程式執行的時候才存在(區域性作用域)。
自由空間(堆記憶體):儲存動態分配的物件。必須顯示銷毀。
「4」new預設情況下是預設初始化,即內建物件或組合型物件的值是為定義的,而類型別物件將使用預設建構函式進行初始化:
string *ps = new string; //初始化為空的字串
int * pi = new int; //pi指向乙個未初始化的int 可使用值初始化:int * pi = new int(); z值初始化為0。 也可以傳入引數:int * pi = new int(1024);
或列表初始化 vector*pv = new vector;
「5」delete接受物件為指標型別,
當其釋放一塊非new建立的記憶體,或者將相同的指標(指向同一塊記憶體的指標)釋放多次,其行為是未定義的。
「6」當程式用光了可用記憶體,new表示式會失敗,預設情況丟擲std::bad_alloc異常。
阻止丟擲異常: int *p = new (nothrow) int; //如果失敗返回空指標。
4) 利用虛函式求解
基礎知識補充:
6 5 發散思維能力
面試題47 不用加減乘除做加法 面試題48 不能被繼承的類 參考 所有offer題目的leetcode鏈結及python實現 github target offer 題目 求1 2 n,要求不能使用乘除法 for while if else switch case等關鍵字及條件判斷語句 a?b c ...
劍指offer 發散思維能力
求1 2 3 n,要求不能使用乘除法 for while if else switch case等關鍵字及條件判斷語句 a?b c 1 解法一 python函式 coding utf 8 class solution def sum solution self,n write code here r...
劍指Offer 發散思維能力
不用加減乘除做加法 求1 2 3 n,要求不能使用乘除法 for while if else switch case等關鍵字及條件判斷語句 a?b c 看到這道題的第一反應是使用迴圈或者遞迴,但是,題目要求不能使用for while if else switch case等關鍵字及條件判斷語句。第二...