面试题46:求1+2+...+n

来源:互联网 发布:mac暗影格斗2无限钻石 编辑:程序博客网 时间:2024/04/29 15:52

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


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

创建一个类,设置两个静态变量i和sum,并在构造函数中对i++,sum+=i,每次创建一个类的对象时都会调用构造函数,由于成员变量又是静态的,所以每次i都加1,sum用来保存每次加上i之后的总和,求1到N的总和就是创建N个对象,然后将sum的值返回即可。


#include <iostream>using namespace std;class Temp{public:Temp(){i++;sum+=i;}//初始化static void Reset(){i=0;sum=0;}//获取总和static int GetSum(){return sum;}private: //设置为static的static unsigned int i;    static unsigned int sum;};unsigned int Temp::i=0;unsigned int Temp::sum=0;int GetSum(int n){    Temp::Reset();//创建N个对象Temp * temp=new Temp[n];delete[] temp;temp=NULL;return Temp::GetSum();}int main(){cout<<GetSum(3)<<endl;return 0;}



Java:

public class GetSum {/** * @param args */public static void main(String[] args) {System.out.println(getSum(5));}public static int getSum(int n){Sum[] sum=new Sum[n];for(int i=0;i<n;i++){sum[i]=new Sum();}return Sum.getSum();}public static class Sum{private static int i;private static int sum;public Sum(){i++;sum+=i;}public static int getSum(){return sum;}}}


解法二:利用虚函数求解

#include <iostream>using namespace std;class A;A* Array[2];//设置一个存储A对象的数组class A{public:      virtual int Sum (int n)   {  //当n为0的时候返回0  return 0;   }};class B: public A{public:      virtual int Sum (int n)   {   //当n不为0的时候!!n=1,都调用B类中的sum函数  return Array[!!n]->Sum(n-1)+n;  }};int solution2_Sum(int n){      A a;      B b;      Array[0] = &a;      Array[1] = &b;      int value = Array[1]->Sum(n);      return value;}
1.创建父类A,编写sum方法。

2.创建子类B,继承A并重写sum方法。

3.创建一个数组,下标为0的存储A类对象,下标为1存储B类对象

4.调用B类的sum方法并传入n,根据!!n判断n是否为0,不为0一直调用B的sum方法进行递归求和,当n为0的时候调用A的sum方法返回0



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


0 0
原创粉丝点击