方法1:利用构造函数求解
class Temp{
public :Temp(){++N;Sum+=N;}
static void reset(){N=0;Sum=0;}
static int GetSum(){return Sum;}
private:
static int N;
static int Sum;
};
int Temp::N=0;
int Temp::Sum=0;
class Solution {
public:
int Sum_Solution(int n) {
Temp::reset();
//这里就是调用了n次的构造函数,每次的N分别为1,2,...n,每次的Sum为上一次的Sum+N 注意这里设置为静态的重要性
Temp *a=new Temp[n];delete []a;
a=NULL;
return Temp::GetSum();
}
};
方法2:利用虚函数
class A
{
public:
virtual int Sum(int n)
{
return 0;
}
};
A* Array[2];
class B:public A{
public:
virtual int Sum(int n)
{
return Array[!!n]->Sum(n-1)+n;
}
};
class Solution {
public:
int Sum_Solution(int n) {
A a;
B b;
Array[0]=&a;
Array[1]=&b;
int value=Array[1]->Sum(n);
return value;
}
};
方法3:
typedef int(*fun)(int);
int sum(int n)
{
return 0;
}
int Sum_Solution3(int n) {
static fun f[2]={sum,Sum_Solution3};
return n+f[!!n](n-1);
}
class Solution {
public:
int Sum_Solution(int n)
{
return Sum_Solution3(n);
}
};