//自寫乘法
class Solution{
public:
//利用ab = a/2·2b的性質
int multi(int a, int b){
int res = 0;
(a&1) && (res += b);//如果a是奇數,那麼除以2之後,再乘以2,會少1,所以在res上先補1個b
a >>= 1;
b <<=1;//a除以2,b乘以2
a && (res += multi(a, b));//如果a不是0,執行a/2·2b的操作
return res;
}
int Sum_Solution(int n){
return multi(n,n+1)>>1;
}
};
//構造函數法
class Calculator{
static int N;
static int sum;
public:
static int getSum(){return sum;}
static void resetNum(){N=sum=0;}
Calculator(){sum += ++N;}
};
int Calculator::N = 0;
int Calculator::sum = 0;
class Solution {
public:
int Sum_Solution(int n) {
if(n<1) return -1;
Calculator::resetNum();
Calculator* temp = new Calculator[n];
delete[] temp;
return Calculator::getSum();
}
};
//虛函數法
class Base;
Base* B[2];
class Base{
public:
virtual int getSum(int){return 0;}
};
class Derived:public Base{
int getSum(int n){return B[!!n]->getSum(n-1)+n;}
};
class Solution{
public:
int Sum_Solution(int n){
if(n<1) return -1;
Base b;
Derived d;
B[0] = &b;
B[1] = &d;
return B[1]->getSum(n);
}
};
//函數指針法
typedef int (*pSumFun)(int n);
int sumFinal(int);
int sum(int n);
pSumFun funs[2]={sumFinal,sum};
int sumFinal(int){return 0;}
int sum(int n){return n+funs[!!n](n-1);}
class Solution{
public:
int Sum_Solution(int n){
if(n<1) return -1;
return funs[1](n);
}
};
//模板類型法(VS2013上可以通過)
template<unsigned int n>
struct solution{
enum Value{N = solution<n-1>::N + n};
};
template<>//顯式聲明特例
struct solution<0>{
enum Value{N=0};
};
class Solution{
public:
int Sum_Solution(int n){
const unsigned int num = n;
return solution<num>::N;
}
};
//邏輯短路法
class Solution{
public:
int Sum_Solution(int n){
int res=0;
n && (res += Sum_Solution(n-1) + n);
return res;
}
};
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.