求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
1. 通过构造函数
class sum
{
public:
sum()
{
_n += _count;
++_count;
}
static void setNum()
{
_count = 1;
_n = 0;
}
static int _count;
static int _n;
};
int sum::_count = 1;
int sum::_n = 0;
class Solution {
public:
int sumNums(int n) {
sum::setNum();
sum* a = new sum[n];
delete[] a;
a = nullptr;
return sum::_n;
}
};
2. 通过逻辑短路
class Solution {
public:
int ret = 0;
int sumNums(int n) {
bool flag = n > 1 && sumNums(n - 1); // n = 1 就会短路
ret += n;
return ret;
}
};
3. 通过存储数据大小
class Solution {
public:
int sumNums(int n) {
char arr[n][n + 1];
return sizeof(arr) >> 1;
}
};
4. 通过析构函数
class A
{
public:
virtual int sum(int n)
{
return 0;
}
};
A* arr[2];
class B : public A
{
public:
virtual int sum(int n)
{
return n + arr[!!n]->sum(n - 1);
}
};
class Solution {
public:
int sumNums(int n) {
A a;
B b;
arr[0] = &a;
arr[1] = &b;
return b.sum(n);
}
};