題目描述
求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷陳述句(A?B:C),
題解1
使用靜態成員:
1.設定靜態成員變數_i和_sum,在建構式中進行累加運算,
2.創建一個大小為n的物件陣列,在創建的時候會自動呼叫n次建構式,即實作了n次累加運算,
3.注意在每次獲取到_sum的值后,要將_i和_sum的值復原,不然會出錯,
class Sum{
public:
Sum(){
_sum+=_i;
++_i;
}
static int GetSum(){
int sum=_sum;
_i=1;
_sum=0;
return sum;
}
private:
static int _i;
static int _sum;
};
int Sum::_i=1;
int Sum::_sum=0;
class Solution {
public:
int Sum_Solution(int n) {
//Sum arr[n]; //VS環境下會報錯
Sum* p = new Sum[n]; //創建一個類物件的陣列,會呼叫n次建構式
return Sum::GetSum();
}
};
題解2
使用遞回:
1.由于不能使用if陳述句來終止遞回,所以想到用邏輯與&&來進行判斷,
2.A&&B,表示如果A成立則執行B,否則不執行,可以這樣來判斷,當n>1時,執行遞回函式,
class Solution{
public:
int Sum_Solution(int n){
//if(n==1) return n;
//return n+Sum_Solution(n-1);
bool x=n>1 && (n+=Sum_Solution(n-1));
return n;
}
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/261818.html
標籤:其他
上一篇:JVM筆記-6 Java Virtual Machine Stacks(Java虛擬機堆疊基本認識)
下一篇:小馬商城api介面檔案
