JZ64 求1+2+3+...+n

时间:2024-10-31 07:24:02

摘录自牛客网:求1+2+3+...+n_牛客题霸_牛客网

题目:如下文

求1+2+3+...+n,要求不能使用乘除法                                       
  for、while、if、else、switch、case等关键字及条件判断语句

答案:如下图

class Sum{
public:
    Sum()
    {
        _sum+=_n;
        ++_n;
    }

    static int GetSum()
    {
        return _sum;
    }

private:
    static int _n;
    static int _sum;
};

int Sum::_n=1;
int Sum::_sum=0;

class Solution {
public:
    int Sum_Solution(int n) {
        Sum a[n];
        return Sum::GetSum();
    }
};

解析:

题目不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句,那么我们可以考虑采用c++中的类进行实现,其中的构造函数恰巧可以实现

(1)创建Sum类,构建成员变量_n,_m

这里我们使用static,使_n,_sum储存在代码段或静态区中,使其成为全局变量,属于每一个对象,也属于这个类

class Sum{
private:
    static int _n;
    static int _sum;
};

(2)定义成员变量Sum()

使用+=运算符使n加在sum里,在进行++n

这样每调用一次构造函数Sum,便将n的值加在sum里了

class Sum{
public:
    Sum()
    {
        _sum+=_n;
        ++_n;
    }

private:
    static int _n;
    static int _sum;
};

(3)初始化_n,_sum

使用域作用操作符::将_n初始化为1(由于是从1开始进行加)

_sum初始化为0(开始时和为0)

int Sum::_n=1;
int Sum::_sum=0;

(4)调用类Sum构造数组

现需要补充一个知识数组中有几个元素,就会调用构造函数多少次

例如:Sum a[1]有一个元素那么调用构造函数1次

           Sum a[2]有一个元素那么调用构造函数2次

                               以此类推

           Sum a[n]有一个元素那么调用构造函数n次

在这个调用构造函数n次的过程中我们就逐步实现了_sum=1+2+3+...+_n

class Solution {
public:
    int Sum_Solution(int n) {
        Sum a[n];
    }
};

(5)返回_Sum的值

这里我们定义一个由static修饰的返回值为int类型的成员函数GetSum()

在类域内可以访问储存在静态区中的类域内的_sum成员变量

这里我们就可以return _sum;

class Sum{
public:
    Sum()
    {
        _sum+=_n;
        ++_n;
    }

    static int GetSum()
    {
        return _sum;
    }
};

(6)返回_sum

这里由于成员函数GetSum()被static进行修饰

我们可以直接使用类去访问GetSum()

这里注意由于被static修饰对象无法对成员函数GetSum()进行访问,故我们使用类去访问GetSum()

class Solution {
public:
    int Sum_Solution(int n) {
        Sum a[n];
        return Sum::GetSum();
    }
};

到这里我们解题完毕

如果对您有帮助的话点一个免费的赞和收藏叭!

由于作者水平不足,如果有任何错误,请读者在评论区交流!