题目描述
求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
解题思路
短路计算调用递归。
class Solution {
public:
int Sum_Solution(int n) {
int ans=n;
// &&在c++中如果前面为假则后面的不执行
ans && (ans+=Sum_Solution(n-1));
return ans;
}
};
构造函数求解
// 构造函数求解
class Temp{
public:
Temp(){
n++;
sum+=n;
}
static void reset() {
n=0;
sum=0;
}
static int getsum(){ return sum;}
private:
static int n;
static int sum;
};
int Temp::n=0;
int Temp::sum=0;
class Solution {
public:
int Sum_Solution(int n) {
Temp::reset();
//调用N次
Temp *a = new Temp[n];
delete []a;
a=NULL;
return Temp::getsum();
}
};
来自这里
构造函数主要用于为对象分配空间,进行初始化。构造函数除了具有一般成员函数的特征外,还具有一些特殊的性质:
(1)构造函数的名字必须与类名相同
(2)构造函数可以有任意类型的参数,但不能指定返回类型。它有隐含的返回值,该值由系统内部使用。
(3)构造函数是特殊的成员函数,函数体可写在类体内,也可写在类体外。
(4)构造函数可以重载,即一个类中可以定义多个参数个数或参数类型不同的构造函数。
(5)构造函数被声明为公有函数,但它不能像其他成员函数那样被显式地调用,它是在定义对象的同时被调用的。
析构函数也是一种特殊的成员函数。它执行与构造函数相反的操作,通常用于撤消对象时的一些清理任务,如释放分配给对象的内存空间等。析构函数有以下一些特点:
(1)析构函数与构造函数名字相同,但它前面必须加一个波浪号(~);
(2)析构函数没有参数,也没有返回值,而且不能重载。因此在一个类中只能有一个析构函数;
(3)当撤消对象时,编译系统会自动地调用析构函数。
// 虚函数求解
class A;
A *Array[2];
class A{
public:
virtual unsigned int SUM(unsigned int n){ return 0;}
};
class B:public A{
virtual unsigned int SUM(unsigned int n){
// !!n:n=0是为false,否则为true
return Array[!!n]->SUM(n-1)+n;
}
};
class Solution {
public:
int Sum_Solution(int n) {
A a;
B b;
Array[0]=&a;
Array[1]=&b;
int value = Array[1]->SUM(n);
return value;
}
};