44.1+2+3+...+n

来源:互联网 发布:苹果手机默认软件 编辑:程序博客网 时间:2024/05/23 14:00
求1+2+3+...+n
  • 参与人数:2683时间限制:1秒空间限制:32768K
  •  算法知识视频讲解

题目描述

求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
1+2+3+...+n除了用公式n( n + 1 ) / 2之外,无外乎循环和递归,由于明确限制for和while的使用,循环已经不能用了,递归需要用if来判断出口条件,题目同样不允许使用。
我们可以先定义一个类型,接着创建n个该类型的实例,那么这个类型的构造函数会被执行n次,可以将累加的相关代码写在构造函数里。
// 44.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"class Solution {public:class StaticTmp{public:StaticTmp(){++n;sum += n;}static void reset(){n = 0;sum = 0;}static int getNum(){return sum;}private:static unsigned int n;static unsigned int sum;};public:int Sum_Solution(int n) {StaticTmp::reset();StaticTmp* tmp = new StaticTmp[n];return StaticTmp::getNum();}};unsigned int Solution::StaticTmp::n = 0;unsigned int Solution::StaticTmp::sum = 0;int _tmain(int argc, _TCHAR* argv[]){Solution s;int result = s.Sum_Solution(100);return 0;}

我在Solution类里面定义了StaticTmp类,这种类中类的写法并不稀罕,在其他工程中见过,注意StaticTmp类的静态成员变量必须在StaticTmp类的外面初始化,编译器对静态成员变量的初始化要求非常严格,n和sum被声明为unsigned int,那么初始化必须是unsigned int,下面这种写法是错误的
 int Solution::StaticTmp::n = 0; int Solution::StaticTmp::sum = 0;
编译器不会做类型转换。

第二次做:
class Solution {class Tmp {public:Tmp()         {             ++n ;            sum += n ;        }static int getSum() { return sum ; }static void reset() { sum = 0 ; n = 0 ; }static unsigned int n;static unsigned int sum ;} ;public:int Sum_Solution(int n) {Tmp::reset() ;Tmp* arr = new Tmp[n] ;int result = Tmp::getSum() ;delete[] arr ;return result ;}};unsigned int Solution::Tmp::sum = 0 ;unsigned int Solution::Tmp::n = 0 ;

第三次做:
class Solution {    class tmp {    public :        tmp() {            ++ n ;            sum += n ;        }        static void reset() {            n = 0 ;            sum = 0 ;        }        static int getSum() {            return sum ;        }    private :        static int sum ;        static int n ;    } ;public:    int Sum_Solution(int n) {        tmp::reset() ;        tmp* arr = new tmp[n] ;        int sum = tmp::getSum() ;        return sum ;    }};int Solution::tmp::sum = 0 ;int Solution::tmp::n = 0 ;

第三次做:
class Solution {public:    int Add(int num1, int num2) {int sum ;        int carray ;                do {            sum = num1 ^ num2 ;            carray = ( num1 & num2 ) << 1 ;                        num1 = sum ;            num2 = carray ;        } while ( num2 != 0 ) ;                return sum ;    }};


0 0
原创粉丝点击