题目:
求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。
分析:
解一:利用类的构造函数进行加法运算,创建一个数组,长度为n。
- /*Title: 12.不使用乘法等关键字求和: 解一
- Author: gocode
- Date: 2012-10-15*/
- #include <iostream>
- using namespace std;
- class SumN
- {
- public:
- SumN()
- {
- n++;
- sum+=n;
- }
- void sumResult();
- private:
- static int sum;
- static int n;
- };
- int SumN::sum=0;
- int SumN::n=0;
- void SumN::sumResult()
- {
- cout<<sum<<endl;
- }
- int main()
- {
- SumN *pSum=new SumN[100];
- pSum->sumResult();
- delete pSum;
- system("pause");
- return 0;
- }
解二:利用模板元编程
- /*Title: 12.不使用乘法等关键字求和: 解二
- Author: gocode
- Date: 2012-10-15*/
- #include <iostream>
- using namespace std;
- template <unsigned N>
- class C_Num
- {
- public:
- enum { m_Value = N + C_Num<N - 1>::m_Value};
- };
- template< >
- class C_Num<1>
- {
- public:
- enum { m_Value = 1};
- };
- int main()
- {
- cout << C_Num<100>::m_Value << endl;
- return 0;
- }
解三:利用递归
- /*Title: 12.不使用乘法等关键字求和: 解三
- Author: gocode
- Date: 2012-10-15*/
- #include <iostream>;
- using namespace std;
- typedef int (*PF_Fun) (int nValue);
- PF_Fun paFun[2];
- int GetSum1(int nValue)
- {
- return 0;
- }
- int GetSum2(int nValue)
- {
- return (*paFun[!!nValue])(nValue - 1) + nValue;
- }
- int GetValue2(int nValue)
- {
- paFun[0] = GetSum1;
- paFun[1] = GetSum2;
- int nSum = GetSum2(nValue);
- return nSum;
- }
- int main()
- {
- cout << GetValue2(100) << endl;
- system("pause");
- return 0;
- }