計算從1加到100不使用迴圈和條件語句。
阿新 • • 發佈:2019-01-30
解決該問題當然可以使用n個printf或cout,但這也太浪費體力了,但如果不能讓編譯器自己生成這麼多printf或cout,也許可以吧。
下面的解決分別從遞迴,巨集函式,類以及模板進行解決。
以下原始碼
#pragma once //遞迴解決, //遞迴結束條件: //當n為零時(由於&&) //就不會判斷後面 //的表示式的結果 int f(int n) { int t = 0; n && (t = f(n - 1) + n); return t; } void test1() { cout << f(100) << endl; } //遞迴 //定義一個數組,存放計算值 //和不計算值,計算完畢後 //呼叫不計算的那個函式 int YesCount(int n); int NoCount(int n); typedef int(*fnPtr)(int); fnPtr dispath[] = { YesCount, NoCount }; int YesCount(int n) { static int ret = 0; ret += n; dispath[n == 1](n - 1); return ret; } int NoCount(int n) { return 0; } void test2() { cout << YesCount(100) << endl; } //巨集函式解決每呼叫一次 //C(x)加10次 #define C(x) x; x; x; x; x; x; x; x; x; x; void test3() { int sum = 0; int i = 1; C(C(sum += i++)); cout << sum << endl; } //用類解決 //每次構造ret的值都會增加 class Count { public: Count() { ret += i++; } static int i; static int ret; }; int Count::ret = 0; int Count::i = 1; void test4() { Count c[100]; cout << Count::ret << endl; } //用模板(template)解決 //當N變為1的時候,停止。 template <int N> int Sum() { return N + Sum<N - 1>(); } template<> int Sum<1>() { return 1; } void test5() { cout << Sum<100>() << endl; }