求1+2+...+n

  本来这个题目没有可说的,但却要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C),那么一般的方法,或者递归之类的解法都不行,因为不是要用么循环就是要用到if.

  首先,想到用math函数来做,除法可以通过右移来实现,(n*n+n)/2,平方可以用pow(n,2)

  另一种方法可以通过类来实现,只要定义两个静态成员变量,每次构造一个对像的时候,构造函数将两变量进行运算,最终得到想要的解

#include<iostream>
#include<cmath>
int Sum(int n);
class SumClass{
    private:
        static int m_num; //不能在这里初始化
        static int m_sum;
    public:
        SumClass() {m_num++;m_sum+=m_num;}
        static void Reset(){m_sum=0;m_num=0;}
        static int Res() {return m_sum;};
};
//静态成员变量的初始化
int SumClass::m_num=0;
int SumClass::m_sum=0;
using namespace std;
int main()
{
    int n;
    cout<<"Input the upper bond:";
    cin>>n;
    cout<<"the sum is:"<<Sum(n)<<endl;

    //****************************use the class
    SumClass *sum=new SumClass[n];
    cout<<"use the class:"<<SumClass::Res()<<endl;
    return 0;
}
int Sum(int n)
{
    n+=pow(n,2);
    return (n>>1);
}
posted on 2012-09-27 15:32  CodeAnt  阅读(181)  评论(0编辑  收藏  举报