限制条件下计算累加和


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)


小伙伴们也可以帮我补充下哦!

猜你喜欢

转载自blog.csdn.net/qq_30534935/article/details/107856149
今日推荐