gpt4 book ai didi

c++ - Sum 1 ~ N,不使用乘法、除法、if、while、for、switch和三元表达式

转载 作者:搜寻专家 更新时间:2023-10-30 23:55:01 24 4
gpt4 key购买 nike

今天,我试着和我的 friend 一起解决一个奇怪的(某种)问题。

Try to get the sum of 1 + 2 + ··· + n, without using multiplication and division, for, while, if, else, switch, case, ternary expression and other keywords.

这是我们的解决方案

  • 构造函数

    class Sum
    {
    public:
    Sum() { ++num; sum += num; }
    static void Init() { num = 0; sum = 0; }
    static unsigned int SumValue() { return sum; }
    private:
    static unsigned int num;
    static unsigned int sum;
    };
    unsigned int Sum::num = 0;
    unsigned int Sum::sum = 0;

    unsigned int get_sum(unsigned int n)
    {
    Sum::Init();

    Sum * tmp = new Sum[n];
    delete[] tmp;

    return Sum::SumValue();
    }
  • 递归

    class Ba
    {
    public:
    virtual unsigned int sum(unsigned int n)
    {
    return 0;
    }
    };

    Ba* sumArray[2];

    class D : public Ba
    {
    public:
    virtual unsigned int sum(unsigned int n)
    {
    return sumArray[!!n]->sum(n - 1) + n;
    }
    };

    unsigned int get_sum2(unsigned int n)
    {
    Ba b;
    D d;
    sumArray[0] = &b;
    sumArray[1] = &d;

    return sumArray[1]->sum(n);
    }

我们认为也许这个问题可以通过 var template 来解决?然而,我们没能弄明白。是否可以使用 template 来做到这一点?

顺便说一句,我们试图在此站点中找到相同的问题,但我们失败了。如果是的话,很抱歉这个重复的问题。

最佳答案

使用最少的关键字,使用短路评估

unsigned sum(unsigned n) {
unsigned i=0;
n && (i=n+sum(n-1));
return i;
}

关于c++ - Sum 1 ~ N,不使用乘法、除法、if、while、for、switch和三元表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34154875/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com