求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
解题思路:
利用构造函数,构造n个对象(一个有着n个对象的数组),那么这个加的动作就能执行n次。(利用构造函数实现循环)。
代码:建立一个temp类,通过该类的构造函数实现加法的循环
我的错误点:
1.需要将temp类中的init() 和 ret()方法设置为static函数。这样可以在不指定对象的时候调用类方法。
2.需要在类外对num和sum变量进行初始化(我不太明白),百度的结果:因为静态成员属于整个类,而不属于某个对象,如果在类内初始化,会导致每个对象都包含该静态成员,这是矛盾的。(慢慢体会吧)
class temp{
static int num;
static int sum;
public:
temp(){
++num;
sum+=num;
}
static void init(){
num = 0;
sum = 0;
}
static int ret(){
return sum;
}
};
int temp::num = 0;
int temp::sum = 0;
class Solution {
public:
int sumNums(int n) {
temp::init();
temp *r = new temp[n];
delete[] r;
r = nullptr;
return temp::ret();
}
};