网上整理的几种方法 算是汇总
#include <iostream>
using namespace std;
//要求不能使用 乘 除 法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)
//题目:求1+2+…+n,
//****************方法1**********************//
//用构类的造函数来实现
/*
class sum
{
public:
static int m ,m_sum;
sum()
{ m_sum += m;
m++;
}
};
int sum::m = 1;
int sum::m_sum = 0;
int main()
{
int n;
cin>>n;
sum a[n];
cout<<a[0].m_sum<<endl;
return 0;
}
*/
//******************方法2**************//
//巧用递归和逻辑运算符 && 操作
/*
int sum(int n,int &m)
{
n && sum(n - 1,m);
return m += n;
}
int main()
{
int n;
int m = 0;
cin>>n;
cout<<sum(n,m)<<endl;
return 0;
}
*/
//*****************方法3*************//
//利用模板元编程实现
//这种方法没有听说过 先MARK一下
/*
template <int 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()
{
const int m = 100;//必须为const否则报错 不知道为什么
//cin>>m;
cout << C_Num<m>::m_Value << endl;
return 0;
}
*/
//******************方法4**************
//http://blog.csdn.net/yuucyf/article/details/6400601
//通过两个函数模拟递归调用的过程
/*--------------------------------
Copyright by yuucyf. 2011.05.06
---------------------------------*/
//typedef int (*PF_Fun) (int nValue);
//PF_Fun paFun[2];//函数指针
/*
int (*paFun[2])(int nValue) ;//把上面的两行 改为下面的一行 其实就是定义了一个函数指针 用上面的自定义类型更直观
//http://blog.csdn.net/qll125596718/article/details/6891881 typedef函数指针用法
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()
{
int n ;
cin>>n;
cout << GetValue2(n) << endl;
return 0;
}
*/
//************方法5************//
//虚函数的特性来处理这样的问题
//MAKR
/*---------------------------
Copyright by july. 2010/10/19
Modified by yuucyf.2011.05.06
----------------------------*/
class C_Num;
C_Num* paNum[2];
class C_Num
{
public:
virtual int GetSum (int nValue) { return 0; }
};
class C_NumEx: public C_Num
{
public:
virtual int GetSum(int nValue) { return paNum[!!nValue]->GetSum(nValue-1) + nValue; }
};
int GetValue2(int nVal)
{
C_Num objNum;
C_NumEx objNumEx;
paNum[0] = &objNum;
paNum[1] = &objNumEx;
//利用虚函数的特性,当paNum[1]为0时,即paNum[0] = &objNum; 执行C_Num::GetSum,
//当Array[1]不为0时, 即paNum[1] = &objNumEx; 执行C_NumEx::GetSum。
int nSum = paNum[1]->GetSum(nVal);
return nSum;
}
int main()
{
int n;
cin>>n;
cout << GetValue2(n) << endl;
return 0;
}