题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。
方法1:使用函数指针。
- typedef int (*function)(int);
- int func1(int n){
- return 0;
- }
- int func2(int n){
- function f[2]={func1,func2};
- return n+f[!!n](n-1);
- }
- void main(){
- cout<<func2(10);
- }
方法2:使用构造函数。
- class test{
- static int N;
- static int sum;
- public :
- test(){sum+=++N;}
- static void reset(){N=sum=0;}
- static int getSum(){return sum;}
- };
- int test::N = 0;
- int test::sum = 0;
-
- void main(){
- test::reset();
- test *p=new test[10];
- cout<<test::getSum();
- delete []p;
- }
方法3:使用虚函数的编译多态性
- class A{
- public:
- virtual int sum(int n){return 0;};
- };
- class B:public A
- {
- public:
- int sum(int n){
- A a;B b;
- A *p[2]={&a,&b};
- return n+p[!!(n-1)]->sum(n-1);}
- };
-
- void main(){
- B b;
- cout<<b.sum(10);
- }