1. 程式人生 > >求1+2+3+...+n的非常規方法

求1+2+3+...+n的非常規方法

指針 pub pri res n) delete pre private bject

題目描述

求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。 思路:   1、利用構造函數,定義靜態變量
 1 class Add
 2 {
 3 public:
 4     Add()
 5     {
 6         ++n;
 7         sum=sum+n;
 8     }
 9     static int getSum()
10     {
11         return sum;
12     }
13     static
void clear() 14 { 15 n=0; 16 sum=0; 17 } 18 private: 19 static int n; 20 static int sum; 21 }; 22 int Add::n=0; 23 int Add::sum=0; 24 class Solution { 25 public: 26 int Sum_Solution(int n) { 27 Add *p=new Add[n]; 28 int result=Add::getSum();
29 Add::clear();//每次算完後要清零 30 delete []p; 31 return result; 32 } 33 };

  2、利用虛函數

 1 class A
 2 {
 3 public:
 4     virtual int getSum(int n)
 5     {
 6         return 0;
 7     }
 8 };
 9 A *Array[2];
10 class B : public A
11 {
12 public:
13     virtual int
getSum(int n) 14 { 15 return Array[!!n]->getSum(n-1)+n; 16 } 17 }; 18 class Solution { 19 public: 20 int Sum_Solution(int n) { 21 A a; 22 B b; 23 Array[0]=&a; 24 Array[1]=&b; 25 return Array[1]->getSum(n); 26 } 27 };

  3、利用函數指針

 1 typedef int (*fun)(int n);
 2 fun Array[2];
 3 int add1(int n)
 4 {
 5     return 0;
 6 }
 7 int add2(int n)
 8 {
 9     return Array[!!n](n-1)+n;
10 }
11 class Solution {
12 public:
13     int Sum_Solution(int n) {
14         Array[0]=add1;
15         Array[1]=add2;
16         return Array[1](n);
17     }
18 };

  4、利用模板類

 1 #include<iostream>
 2 using namespace std;
 3 template<int n>
 4 class A
 5 {
 6 public:
 7     enum Value{
 8         N=A<n-1>::N+n
 9     };
10 };
11 template<>
12 class A<0>
13 {
14 public:
15     enum Value{
16         N=0
17     };    
18 };
19 int main()
20 {
21     cout<<A<100>::N<<endl;//不能動態輸入,必須是在編譯時就能確定的常量
22     return 0;
23 }

求1+2+3+...+n的非常規方法