【剑指offer-解题系列(48)】求1+2+3+...+n

xiaoxiao2021-02-28  77

题目描述

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

分析

此题目目的是为了考采用取巧的方法,总共可以使用三种方法: 虚函数,

代码实现

class MyClass{ public:     MyClass(){        sum += n;        n++;     }     static void init(){         sum = 0;         n = 1;     }     static int getNum(){         return sum;     } private:     static int sum;     static int n; }; int MyClass::sum = 0; int MyClass::n = 1; class Base{ public:     Base(){      }     virtual int add(){              } private:  };  class Derive:Base{ public:     Derive(){      }     virtual int   private:  };  // class Solution { public:     ///构造函数版本     int Sum_Solution1(int n) {         MyClass::init();         MyClass*h = new MyClass[n];         int res =  h[0].getNum();          return res;     }          ///中断条件版本     int Sum_Solution2(int n) {           int res = n;         res && (res+=Sum_Solution(n-1));         return res;     }          ///虚函数版本     int Sum_Solution3(int n) {           int res = n;         res && (res+=Sum_Solution(n-1));         return res;     } };

转载请注明原文地址: https://www.6miu.com/read-85420.html

最新回复(0)