面试100题:12.不使用乘法等关键字求和

来源:互联网 发布:linux关闭防火墙状态 编辑:程序博客网 时间:2024/05/06 09:53

题目

求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。

分析

解一:利用类的构造函数进行加法运算,创建一个数组,长度为n

  1. /*Title:    12.不使用乘法等关键字求和: 解一 
  2. Author:     gocode 
  3. Date:       2012-10-15*/  
  4.    
  5. #include <iostream>  
  6. using namespace std;  
  7.    
  8. class SumN  
  9. {  
  10. public:  
  11.     SumN()  
  12.     {  
  13.         n++;  
  14.         sum+=n;  
  15.    
  16.     }  
  17.     void sumResult();  
  18.    
  19. private:  
  20.     static int sum;  
  21.     static int n;  
  22.    
  23.    
  24. };  
  25. int SumN::sum=0;  
  26. int SumN::n=0;  
  27. void SumN::sumResult()  
  28. {  
  29.     cout<<sum<<endl;  
  30.    
  31. }  
  32. int main()  
  33. {  
  34.     SumN *pSum=new SumN[100];  
  35.     pSum->sumResult();  
  36.     delete pSum;  
  37.     system("pause");  
  38.     return 0;  
  39. }  

解二:利用模板元编程

  1. /*Title:    12.不使用乘法等关键字求和: 解二 
  2. Author:     gocode 
  3. Date:       2012-10-15*/  
  4.    
  5. #include <iostream>  
  6. using namespace std;  
  7.    
  8. template <unsigned N>  
  9. class C_Num  
  10. {  
  11. public:  
  12.     enum { m_Value = N + C_Num<N - 1>::m_Value};  
  13. };  
  14.    
  15. template< >  
  16. class C_Num<1>  
  17. {  
  18. public:  
  19.     enum { m_Value = 1};  
  20. };  
  21.    
  22. int main()  
  23. {  
  24.     cout << C_Num<100>::m_Value << endl;  
  25.     return 0;  
  26. }  

解三:利用递归

  1. /*Title:    12.不使用乘法等关键字求和: 解三 
  2. Author:     gocode 
  3. Date:       2012-10-15*/  
  4.    
  5. #include <iostream>;  
  6. using namespace std;  
  7.    
  8. typedef int (*PF_Fun) (int nValue);  
  9. PF_Fun paFun[2];  
  10. int GetSum1(int nValue)  
  11. {  
  12.     return 0;  
  13. }  
  14.    
  15. int GetSum2(int nValue)  
  16. {  
  17.     return (*paFun[!!nValue])(nValue - 1) + nValue;  
  18. }  
  19.    
  20. int GetValue2(int nValue)  
  21. {  
  22.     paFun[0] = GetSum1;  
  23.     paFun[1] = GetSum2;  
  24.    
  25.     int nSum = GetSum2(nValue);  
  26.     return nSum;  
  27. }  
  28.    
  29. int main()  
  30. {  
  31.     cout << GetValue2(100) << endl;  
  32.     system("pause");  
  33.     return 0;  
  34. }  
0 0
原创粉丝点击