題目
【求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)】
1、分析
可以通過將累加的方法放在類的構造函數中,然後創建類的n個對象,則會調用n次構造函數,從而實現了累加求和。
注意:
- 類的靜態成員變量和靜態成員函數在類中只有一份,爲類的所有對象所共有。
- 類的靜態成員是屬於類的,而非某一個對象,所以調用類的靜態成員可以直接用類名::靜態成員
- 類的靜態成員函數不可以調用類的非靜態成員;而類的非靜態成員函數則可以調用類的靜態成員
- 類的靜態成員變量只能在類中聲明,在類外進行定義或初始化
2、代碼
class Temp{
public:
Temp()
{
n++;
sum+=n;
}
static int GetSum(){return sum;}
static void ResetNum()
{
n=0;
sum=0;
}
private:
//類的靜態成員只能在類中聲明,而不能在類中定義
static int n, sum;
};
// 類的靜態成員必須在類外定義
int Temp::n=0;
int Temp::sum=0;
class Solution {
public:
int Sum_Solution(int n) {
Temp::ResetNum();
//創建類的n個對象,從而實現調用類的構造函數n次
Temp *p=new Temp[n];
delete[] p;
p=nullptr;
return Temp::GetSum();
}
};
2、方法二
利用邏輯與運算
class Solution {
public:
int sumNums(int n) {
int res=n;
res && (res+=sumNums(n-1));//res=0時,後面的部分將不再運算
return res;
}
};