【 声明:版权所有,转载请标明出处,请勿用于商业用途。 联系信箱:libin493073668@sina.com】
题目描述
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
思路
这道题初看起来貌似并想不到什么太好的方法,但是如果我们熟悉C++的特性,或者对递归比较了解的话,还是能找到一些解决的方法
1.使用递归
class Solution
{
public:
int Sum_Solution(int n)
{
int sum = n;
bool flag = (n>0) && ((sum+=Sum_Solution(n-1))>0);
return sum;
}
};
2.构造函数
class Temp
{
public:
Temp()
{
++N;
Sum+=N;
}
static void Reset()
{
N = 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();
Temp *a = new Temp[n];
delete []a;
a = NULL;
return Temp::GetSum();
}
};
3.虚函数
class A;
A* Array[2];
class A
{
public:
virtual int Sum(int n)
{
return 0;
}
};
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;
return Array[1]->Sum(n);
}
};