题目:求1+2+...+n,要求不能使用乘法除法、for、while、if、else、switch、case等关键字字及其条件判断语句。 方法一:构造函数方法二:虚函数class Temp { private: static unsigned int num; static unsigned int sum; public: Temp(){ ++num; sum += num; } static int getSum(){ return sum; } static void reset(){ num = 0; sum = 0; } }; unsigned int Temp::num = 0; unsigned int Temp::sum = 0;
方法三:函数指针struct A; A* arr[2]; struct A { virtual int sum(int n){ return 0; } }; struct B : A { virtual int sum(int n){ return arr[!!n]->sum(n - 1) + n; } };
方法四:类模板typedef int(*fun)(int); int s_teminator(int n) { return 0; } int s_sum(int n) { fun arr[2] = { s_teminator, s_sum }; return arr[!!n](n - 1) + n; }
template <int n> struct solusion_sum { enum value{ N = solusion_sum<n - 1>::N + n }; }; template <> struct solusion_sum<1> { enum value{ N = 1 }; };
不使用乘法除法循环递归做累加操作
最新推荐文章于 2021-03-22 16:53:04 发布
本文介绍了四种在不允许使用乘法、除法、循环、条件判断语句的情况下求1到n的累加和的方法。方法一利用构造函数累加;方法二通过虚函数和继承实现;方法三借助函数指针;方法四采用类模板枚举。这些技巧展示了编程思维的灵活性。
摘要由CSDN通过智能技术生成