题目:求1+2+…+n,
要求不能使用乘除法、for、while、if、else、switch、case等关键字
以及条件判断语句(A?B:C)。
被考倒了。。。
用到了:类的静态变量特性,Bool的二值特性,模板元编程!!!,还有就是我的 霸王硬上弓 算法
//============================================================================ // Name : IntrestingAdd.cpp // Author : YLF // Version : // Copyright : Your copyright notice // Description : Hello World in C++, Ansi-style //============================================================================ #include <iostream> using namespace std; int f(int n); int b(int n); int c(); //**********************方法一:利用类静态变量***************** class Value{ public: static int n; static int sum; public: static void initValue(){ n = 0; sum = 0; } Value(){ n++; sum += n; } static int getValue(){ return sum; } }; int Value::n = 0; int Value::sum = 0; //******************方法二,利用模板元编程******************************** template<int N> struct add{ enum {result = N + add<N-1>::result}; }; template<> struct add<0> { enum {result=0}; }; //***********************方法三:利用Bool类型只有01值!!! int f2(int); int main() { cout<<"1+2+..+100="<<f2(100)<<endl;//f(100); cout<<add<100>::result<<endl; Value::initValue(); Value* temp = new Value[100]; delete[] temp; cout<<Value::getValue(); return 0; } //******************本想用递归,结果。。。还是用到了if,不过改进下 成为f2()******************************** int f(int n){ if(n == 1) return 1; int sum = 0; sum = n + f(n-1); return sum; } int f2(int n){ int arr[2]; arr[0] = 0; arr[1] = f(n-1); return n + arr[!!n]; } //***************************方法4:你妹的,老子强奸了你 哈哈哈 10*10************* int b(int n){ return n + n+1 + n+2 + n+3 + n+4 + n+5 + n+6 + n+7 + n+8 + n+9; } int c(){ return b(1) + b(11) + b(21) + b(31) + b(41) + b(51) + b(61) + b(71) + b(81) + b(91); }