Test Message

e156: 良心題: 求和

內容

如何不用乘法、除法、<<、>>、~、^,也不用 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


解題思路

兩種解法

  1. 利用短路求值的方式用邏輯閘代替 if

  2. 利用函式指標陣列和邏輯 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;
}