题目:求1+2+…十n,要求不能使用乘除法、for、while、if、 else.switch,case等关键字及条件判断语句(A?B:C)
解法1:构造函数求解,创建N个该类型的实例,把累加放在构造函数里做。
class Temp {
private:
static unsigned int N;
static unsigned int Sum;
public:
Temp(){ ++N; Sum += N;}
static void Reset(){ N = 0; Sum = 0;}
static unsigned int Getsum(){ return Sum; }
};
unsigned int Temp::N = 0;
unsigned int Temp::Sum = 0;
unsigned int sum_solution1(unsigned int n)
{
Temp:: Reset () ;
Temp *a =new Temp[n];//每实例化一个Temp,N自加一次,Sum求一次和
delete [ ]a;
a = NULL;
return Temp::Getsum();
}
解法2:虚函数求解,定义两个函数,一个函数充当递归函数的角色,另一个函数做递归的终止判断。做递归终止的判断时,可对n进行两次非运算。即当n=0时,即可判断递归终止。
class A;
A*Array[2];
class A {
public:
virtual unsigned int sum (unsigned int n) {
return 0;
}
};
class B:public A
{
public:
virtual unsigned int sum (unsigned int n) {
return Array[!!n]->sum(n-1) + n;//累加
}
};
int sum_solut