程序员面试100题精选(8)

昨天晚上整理了一个题目,是计算1+2+3+4...+100,当时使用的是递归的方法进行计算,今天上午来实验室之后看面试100题,发现其中的第八题也是一道这样的题目,但是他却有很多的限制条件,不能使用乘除法,for,while,if,else,switch,case等关键字以及条件判断语句(A?B:C)。

 
分析:第一次遇到这种题目,没有思路,在看到了原文作者的提示之后,想到使用类来做。大体梳理一下:
 
    定义一个class,为其分配一个静态成员,因为类的静态成员是属于类本身所有,程序运行时分配的是内存中静态存储区的空间,并不属于任何的对象,因此当类的一个对象被声明或者删除时静态成员不会重新生成一个新的实例或者被直接的删除。在类才构造函数中定义对静态成员的操作,所以可以直接的定义N个该类的对象,就可以直接完成相应的操作,摘录代码,但是我没有做任何的修改,属于原文作者所有:
 1 #include <iostream>
2 using namespace std;
3 class Temp
4 {
5 public:
6 Temp() {++N;sum+=N;}
7 static void Reset() { N=0; sum=0;}
8 static int GetSum() {return sum;}
9 private:
10 static int N;
11 static int sum;
12 };
13 int Temp::N=0;
14 int Temp::sum=0;
15 void main()
16 {
17 Temp::Reset();
18 int n;
19 scanf("%d",&n);
20 Temp *a=new Temp[n];
21 delete []a;
22 a=0;
23 printf("%d",Temp::GetSum());
24 }
原文地址:https://www.cnblogs.com/wdw828/p/2337768.html