题目
【求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;
}
};