面试题64:求1+2+…+n
题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case 等关键字及条件判断语句(A?B:C)。
🐱🏍解法一:利用构造函数求解
#include<iostream>
#include<algorithm>
#include<list>
using namespace std;
class Temp{
public:
Temp(){
++N;
sum+=N;
}
static void Reset(){
N=0;
sum=0;
}
static unsigned int GetSum(){
return sum;
}
private:
static unsigned int N;
static unsigned int sum;
};
unsigned int Temp::N=0;
unsigned int Temp::sum=0;
unsigned int Sum_Solution(unsigned int n){
Temp::Reset();
Temp *a=new Temp[n];
delete []a;
a=NULL;
return Temp::GetSum();
}
int main(){
printf("%d", Sum_Solution(10));
}
🐱🏍解法二:利用虚函数求解
#include<iostream>
#include<algorithm>
#include<list>
using namespace std;
class A;
A* Array[2];
class A{
public:
virtual unsigned int sum(unsigned int n){
return 0;
}
};
class B:public A{
public:
virtual unsigned int sum(unsigned int n){
return Array[!!n]->sum(n-1)+n;
}
};
int Sum_Solution2(int n){
A a;
B b;
Array[0]=&a;
Array[1]=&b;
int value=Array[1]->sum(n);
return value;
}
int main(){
printf("%d", Sum_Solution2(10));
}
🐱🏍解法三:利用函数指针求解
#include<iostream>
#include<algorithm>
#include<list>
using namespace std;
typedef unsigned int (*func)(unsigned int);
unsigned int Solution3_Teminator(unsigned int n){
return 0;
}
unsigned int Sum_Solution3(unsigned int n){
static func f[2]={Solution3_Teminator, Sum_Solution3};
return n+f[!!n](n-1);
}
int main(){
printf("%d", Sum_Solution3(10));
}
🐱🏍解法四:利用模块类型求解
#include<iostream>
#include<algorithm>
#include<list>
using namespace std;
template<unsigned int n> struct Sum_Solution4{
enum Value{
N=Sum_Solution4<n-1>::N+n
};
};
template<> struct Sum_Solution4<1>{
enum Value{
N=1
};
};
template<> struct Sum_Solution4<0>{
enum Value{
N=0
};
};
int main(){
printf("%d", Sum_Solution4<10>::N);
}