C/C++那些奇奇怪怪的語法
阿新 • • 發佈:2020-08-13
在各種地方看到的。
咕著,不定時更新。
1.switch
1.區間表示
思路:略。
程式碼:
#include<stdio.h> double n; double f(double x){ switch((int)x){ case 0 ... 4: return -x+2.5; case 5 ... 9: return 2-1.5*(x-3)*(x-3); default: return x/2-1.5; } } int main(){ scanf("%lf",&n); printf("%.3f\n",f(n)); return 0; }
會發現 switch
裡面好像有點奇奇怪怪的東西?
對就是這玩意。
case x ... y:
的功能:對於 \(x\le k\le y\) 的所有正整數 \(k\) 執行 case
下面的東西。
注意 x
和 y
都只能是 int
。
2.迴圈展開
其實這玩意有個正式名稱,不理它了(
簡單來說就是在 case
下面亂搞。
思路:顯然可以快速冪,但這裡就暴力做吧。
程式碼:
#include<stdio.h> int r,y; double m; int main(){ scanf("%d%lf%d",&r,&m,&y); switch(y&7){ case 0:do{m+=m/100*r;--y; case 7:m+=m/100*r;--y; case 6:m+=m/100*r;--y; case 5:m+=m/100*r;--y; case 4:m+=m/100*r;--y; case 3:m+=m/100*r;--y; case 2:m+=m/100*r;--y; case 1:m+=m/100*r;--y; }while(y); } printf("%d\n",(int)m); return 0; }
這個 do while
的位置奇奇怪怪(
是一種迴圈展開的寫法,但不知道效能有沒有提升。
\[\Huge{\texttt{咕咕咕}} \]