內容
如何不用乘法、除法、<<、>>、~、^,也不用 for、while、if、else、switch、case 及三元運算子,算出 1+2+3+…+n ?
輸入
輸入只有一個正整數 n。
1<=n<=1000
第一筆測資 in
3
第二筆測資 in
4
輸出
請輸出 1+2+3+…+n 的結果。
第一筆測資 out
6
第二筆測資 out
10
解題思路
兩種解法
利用短路求值的方式用邏輯閘代替 if
利用函式指標陣列和邏輯 NOT 取代 if
詳見下方程式碼。
完整程式碼
短路求值版
AC (2ms, 108KB)
#include <stdio.h>
int n, sum;
int dfs() { return (sum += n) && --n && dfs(); }
int main() { scanf(" %d", &n); dfs(); printf("%d", sum); return 0; }
|
函式指標陣列版
AC (2ms, 116KB)
#include <stdio.h>
int stop(int);
int dfs(int);
const int (*func[])(int) = { dfs ,stop };
int stop(int now) { return 0; }
int dfs(int now) { return now + func[!now](now - 1); }
int main() { int n; scanf(" %d", &n); printf("%d", dfs(n)); return 0; }
|