转载并参考July的博客http://topic.csdn.net/u/20101126/10/b4f12a00-6280-492f-b785-cb6835a63dc9.html,万分感谢!
题目:
求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;
}