摘录自牛客网:求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();
}
};
到这里我们解题完毕
如果对您有帮助的话点一个免费的赞和收藏叭!
由于作者水平不足,如果有任何错误,请读者在评论区交流!