求1+2+3+....n
来源:互联网 发布:怎样推广网络棋牌 编辑:程序博客网 时间:2024/05/19 08:03
题目要求:要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)
解法一:
求n个数的累加和就是让累加n次。我们可以在一个类中定义静态变量,然后用构造函数来操作这个变量,然后输出结果。那怎么能让构造函数不用循环和递归操作n次呢,我们于是想到定义数组,这样就会连续调用n次构造函数,以实现我们的目的,代码如下:
#include<iostream>using namespace std;class Test{public: Test() { sum += n; n++; } static int sum; static int n;};int Test::n = 1;int Test::sum = 0;int main(){ Test* test = new Test[5]; cout << Test::sum << endl; return 0;}
解法二:
我们还可以用虚函数来解决这个问题,定义一个类和类中的虚函数,让另一个类去继承
#include<iostream>using namespace std;class B { public: virtual int sum(int n) { return 0; } }; B *array[2]; class C : public B { public: int sum(int n) { //对一个数!之后就变成0,再一次取反就变成1 return n + array[!!(n-1)]->sum(n-1); } }; int main(){ B b; C c; array[0] = &b; array[1] = &c; cout << c.sum(5) << endl; }
解法三:
把上边的思路拓展一下,我们可以想到用函数指针,也是定义一个数组
#include<iostream>using namespace std;int (*ptr[2])(int); //定义一个函数指针数组 int fun1(int n) { return 0; } int fun2(int n) { return n + ptr[!!(n-1)](n-1); } //下面这几句在主函数中 int main(){ ptr[0]=fun1; ptr[1]=fun2; cout << fun2(5) << endl; return 0;}
解法四:
用函数模板,以及模板特化
#include<iostream>using namespace std;template <int n> struct D { enum sum {N=D<n-1>::N+n}; }; template <> struct D<1> { enum sum{N=1}; }; int main(){ cout << D<5>::N << endl; return 0;}
用类模板的另外一种实现方式
#include <iostream>using namespace std;template <int N>class Test :public Test<N - 1> {public: int sum; Test() : sum(N + Test<N - 1>::sum) {}};template<>class Test<0> {public: int sum; Test() : sum(0){}};int main() { Test<5> t; cout << t.sum << endl;}
阅读全文
1 0
- 1、求n!;2、求1!+2!+3!+......+n!之和
- 求1+2+3+....n
- 求1+2+3+...+n
- 求1+2+3+...+n
- 求1+2+3+...+n
- 求1+2+3+...+n
- 求1+2+3+。。。+N
- 求1+2+3+...+n
- 求1+2+3+...+n
- 求1+2+3+...+n
- 求1+2+3+...+n
- 求1+2+3+...+n
- 求1+2+3+...+n
- 求1+2+3+...+n
- 求1!+2!+3!+......+n!
- 求1+2+3+...+n
- 求1+2+3+...+n
- 求1+2+3+...+n
- DDoS deflate:自动屏蔽DDOS攻击IP
- IMWeb提升营 —Day2
- My Eclipse运行卡,可以进行优化的几点
- PHP漏洞全解(一)
- QML关于控件截图
- 求1+2+3+....n
- PHP防止木马攻击的技巧
- 2016-09-01[关于Paint笔触的了解]
- 给文本框添加虚文字
- Perl中use和require用法对比
- 最新版multer1.3.0上传文件
- Android四大图片缓存(Imageloader,Picasso,Glide,Fresco)原理、特性对比
- redis报告书(redisRepo.java)应该可以帮助到大家
- Android5.0+(CollapsingToolbarLayout)可折叠得展开的布局