面试100题:12.不使用乘法等关键字求和
2013-01-29 17:42
423 查看
转载并参考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。
解二:利用模板元编程
解三:利用递归
题目:
求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; }
相关文章推荐
- 面试100题:12.不使用乘法等关键字求和
- PHP实现等差数列求和(不使用乘法,循环,递归)
- 面试100题系列之12判断序列是不是查找二叉树的后序编列
- 每天学习一算法系列(12) (求1+2+…+n,不能使用乘除法,for、while、if 、else、switch、case 等关键字以及条件判断语句)
- 飘逸的python - 不使用关键字,求和1+2+…+n
- 求1+2+…+n,要求不能使用乘除法、for、while、if、else、s witch、case 等关键字以及条件判断语句(A?B:C)和不用循环/goto/递归输出1~100的10种写法
- 微软等数据结构+算法面试100题(12)--快速排序
- 1+2+3+...+100 不允许使用乘法和除法,条件分支循环等
- 12-volatile关键字使用场景
- 算法习题12:求1+2+…+n 不能使用关键字
- C语言学习3-1:成绩检测,使用while和do...while得到九九乘法,1-1/2+1/3-1/4 .......+1/10求和,输入10进制打印2进制,求素数,猜随机产生的数字,16进制转二进制,
- [面试笔记のT-SQL] 与关键字&ldquo;like&rdquo;配合使用的通配符
- 使用递归输出1-100;9*9乘法表
- 面试100题系列之12判断序列是不是查找二叉树的后序编列
- Microsoft100——12.求和
- 我总结的18种1至100的求和方法(使用C++语言)
- Java关键字final、static使用总结
- 微软等数据结构+算法面试100题(9)--在一个int 数组里查找这样的数,它大于等于左侧所有数,小于等于右侧所有数。
- final关键字使用
- 在SUSE12中使用 Machinery 进行高级系统管理