博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面试题46:求1+2+...+n
阅读量:5162 次
发布时间:2019-06-13

本文共 1706 字,大约阅读时间需要 5 分钟。

题目:求1+2+...+n,要求不能使用乘除法、for、while、if、else、swithc、case等关键字及条件判断语句(A?B:C)。

解法一:利用构造函数求解

1 class Temp 2 { 3     public: 4         Temp() 5         { 6             ++N; 7             Sum+=N; 8         } 9         static void Reset()10         {11             N = 0;12             Sum = 0;13         }14         static unsigned int GetSum()15         {16             return sum;17         }18     private:19         static unsigned int N;20         static unsigned int Sum;21 }22 unsigned int Temp::N = 0;23 unsigned int Temp::Sum = 0;24 25 unsiged int Sum_Solution1(unsigned int n)26 {27     Temp::Reset();28     Temp* a = new Temp[n];29     delete [] a;30     a = NULL;31     return Temp::GetSum();32 }

 解法二:利用虚函数求解

可以定义两个函数,一个函数充当递归函数的角色,另一个函数处理终止递归的情况,我们需要做的就是在两个函数里二选一。从二选一我们很自然地想到布尔变量。现在的问题是如何把数值变量n转换成布尔值。如果对n连续做两次反运算,即!!n,那么非零的n转换为true,0转换为false。

1 class A; 2 A* Array[2]; 3  4 class A 5 { 6     public: 7         virtual unsigned int Sum(unsigned int n) 8         { 9             return 0;10         }11 };12 13 class B: publice A14 {15     public:16         virtual unsigned int Sum(unsigned int n)17         {18             return Array[!!n]->Sum(n-1)+n;19         }20 };21 22 int Sum_Solution2(int n)23 {24     A a;25     B b;26     Array[0] = &a;27     Array[1] = &b;28     return Array[1]->Sum(n);29 }

解法三:利用函数指针求解

在纯C语言的编程环境中,我们不能使用虚函数,此时可以用函数指针来模拟。

1 typedef unsigned int (*fun)(unsigned int); 2 unsigned int Solution3_Teminator(unsigned int n) 3 { 4     return 0; 5 } 6  7 unsigned int Sum_Solution3(unsigned int n) 8 { 9     static fun f[2] = {Solution3_Teminator, Sum_Solution3};10     return n+f[!!n](n-1);11 }

解法四:利用模板类型求解

见《剑指Offer》。

转载于:https://www.cnblogs.com/happygirl-zjj/p/4627394.html

你可能感兴趣的文章
读书印记 - 《菊与刀》
查看>>
第一个小demo: spring boot + mybatis + thymeleaf
查看>>
mysql获取字段信息
查看>>
Tomcat 网站部署(三)
查看>>
JS实现全选与取消 Jquery判断checkbox是否被选中
查看>>
如果重新设计网络,有没有可能合并IP地址跟MAC地址?
查看>>
德州扑克总纲
查看>>
linux下password的用法
查看>>
[poj1986]Distance Queries(LCA)
查看>>
BPM配置故事之案例11-操作外部数据源
查看>>
uniGUI试用笔记(一)
查看>>
漫谈python中的搜索/排序
查看>>
js_类数组转化为数组
查看>>
centos 7 安装 rvm 超时
查看>>
类库间无项目引用时,在编译时拷贝DLL
查看>>
module 'socket' has no attribute的解决方案
查看>>
Java NIO vs. IO
查看>>
BIO、NIO、AIO通信机制
查看>>
STL priority_queue<> 用法 <转>
查看>>
POJ-3009 Curling 2.0 简单BFS
查看>>