Question:求 1+2+…+n ?
要求不能使用乘除法、for、while、if、else、switch、case 等关键字。
ps: 代码无误,但运行则需要自行整理(没错,我就是懒得整理)。
.
No.0 三目运算符
class Solution {
public:
int sumNums(int n) {
return n==0 ? 0 : n+sumNums(n-1);
}
};
No.1 或断路
class Solution {
public:
int sumNums(int n) {
!n || (n += sumNums(n-1));
return n;
}
};
No.2 与短路
class Solution {
public:
int sumNums(int n) {
n && (n += sumNums(n-1));
return n;
}
};
No.3 内置函数(不严谨,不推荐)
class Solution {
public:
int sumNums(int n) {
return int(pow(n,2)+n) >> 1;
}
};
No.4 模板类
template <unsigned n>
class mySum{
public:
enum{ value = n + mySum<n-1>::value };
};
template <>
class mySum<0>{
public:
enum{ value = 0 };
};
return mySum<n>::value
No.5 类静态变量
class myClass{
public:
myClass(){ sum += ++n; }
static int n;
static int sum;
};
int myClass::n = 0;
int myClass::sum = 0;
myClass t[n];
return myClass::sum
No.6 函数指针
typedef int (*fun)(int);
int f1(int i){
return 0;
}
int f2(int i){
fun f[2] = {f1, f2};
return i + f[!!i](i-1);
}
return f2(n)
No.7 虚函数
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;
}
};
A a;
B b;
Array[0] = &a, Array[1] = &b;
return Array[1]->sum(n)
小伙伴们也可以帮我补充下哦!