面试题46: 使用构造函数和函数指针完成加法求和
来源:互联网 发布:日系女装 知乎 编辑:程序博客网 时间:2024/05/20 09:07
1.题目,求1+2+3+......+n,要求不能使用乘除法,for,while,if,else、switch、case等关键字及条件判断语句(A?B:C).
分析:
构造函数的方法,定义一个类型,接着创建该类型的n个实例,则该类型的构造函数会被调用n次,可以将累加的代码放在构造函数里。每次都会被调用。
函数指针的方法,可以采用递归的方法,但是限定了if的使用,递归的进行和终止只能用其他的方法来实现,可以写两个函数,一个用来递归,另一个来终止递归,当适当的时候,选择不同的函数,这就需要一个指示变量,可以用布尔变量,两个不同的取值对应两个不同的函数。将数值n转换成布尔值,可以采用!!n的方式,n非零的时表达式是true,n为0时表达式的值是false。
源码:
/* * \file question_46.cpp * * \author 305 * \date 十月 2016 * * */#include <iostream>using namespace std;// ====================方法一====================class Temp{public:Temp() { ++N; Sum += N; }static void Reset() { N = 0; Sum = 0; }static unsigned int GetSum() { return Sum; }private:static unsigned int N;//静态类型,每次递增之后会保留static unsigned int Sum;};unsigned int Temp::N = 0;unsigned int Temp::Sum = 0;unsigned int Sum_Solution1(unsigned int n){Temp::Reset();Temp *a = new Temp[n];delete[]a;a = NULL;return Temp::GetSum();}// ====================方法二====================typedef unsigned int(*fun)(unsigned int);unsigned int Solution2_Teminator(unsigned int n)//终止递归{return 0;}unsigned int Sum_Solution2(unsigned int n)//递归{static fun f[2] = { Solution2_Teminator, Sum_Solution2 };return n + f[!!n](n - 1);//!!n的含义就是转化成布尔值,调用第一个或者第二个函数指针指向的函数,n大于0时递归,n为0是调用第一个函数终止递归}int main(){unsigned int number = 10;cout << "----solution 1----" << endl;unsigned int result1 = Sum_Solution1(number);cout << "the sum of " << number << " is :" << result1 << endl;cout << "----solution 2----" << endl;unsigned int result2 = Sum_Solution2(number);cout << "the sum of " << number << " is :" << result2 << endl;system("pause");return 0;}
0 0
- 面试题46: 使用构造函数和函数指针完成加法求和
- [面试题]构造函数
- 面试题---函数指针
- 构造函数经典面试题
- C++面试题1:构造函数和虚构函数中能否调用虚函数?
- C/C++面试题:编写类String的构造函数、析构函数和赋值函数。
- 程序员面试题之解读构造函数
- java面试题二十五 构造函数
- 构造函数和this指针
- this指针和构造函数
- 面试题之指针函数与函数指针的区别
- 面试题(Qt + 函数指针)
- 面试题(Qt + 函数指针)
- 【C/C++】面试题:函数指针
- 常见笔/面试题-之构造函数和析构函数
- 第十章 函数和指针 p354 指针加法
- 面试题----构造函数与一般函数的区别
- C/C++面试题:构造函数与析构函数
- (Debug)运行ASP.NET网站时报配置错误:未能加载System.web.DataVisualization.dll
- MySQL表连接
- 这两天工作有点失落
- Windows Server 2008通过计划任务定时执行bat文件
- 回调函数(CALLBACK)学习总结
- 面试题46: 使用构造函数和函数指针完成加法求和
- box-sizing:border-box用于移动端页面的开发!
- 第7周项目6 停车场模拟
- Tibco EMS 初级使用方法小结
- DOC命令,Telnet的使用详细介绍
- 5分钟告诉你git是什么?
- 关于bootstrap分页,模态框,实现邮件列表的分页,和模态框添加邮件的功能
- 获取时间CLOCK_MONOTONIC学习——顺记第一次与开源项目交互
- 2016-10-13 启用博客,记此文以自勉