|
发表于 2019-3-14 17:28:08
|
显示全部楼层
本帖最后由 Croper 于 2019-3-14 17:34 编辑
论如何强行使用switch- #include <stdio.h>
- #ifndef min
- #define min(a,b) (((a) < (b)) ? (a) : (b))
- #endif
- #define USE_SWITCH
- const int INCOMESEG[] = {0,100000,200000,400000,1000000,0x7FFFFFFF };
- const double RADIO[] = { 0.1,0.075,0.05,0.015,0.01 };
- int GetIncomeSeg(int i) {
- const int N = sizeof(INCOMESEG) / sizeof(int);
- int p = 0, q = N;
- while (p < q) {
- int n = (p + q) / 2;
- if (i >= INCOMESEG[n]) p = n + 1;
- else q = n;
- }
- return p;
- }
- int main() {
- int i;
- int money = 0;
- printf("please input the i\n");
- scanf("%d", &i);
- #ifdef USE_SWITCH
- int seg = GetIncomeSeg(i);
- switch (seg) {
- case 5:
- money += (i - INCOMESEG[5])*RADIO[4];
- i = INCOMESEG[4];
- //no break;
- case 4:
- money += (i - INCOMESEG[3])*RADIO[3];
- i = INCOMESEG[3];
- //no break;
- case 3:
- money += (i - INCOMESEG[2])*RADIO[2];
- i = INCOMESEG[2];
- //no break;
- case 2:
- money += (i - INCOMESEG[1])*RADIO[1];
- i = INCOMESEG[1];
- //no break;
- case 1:
- money += i * RADIO[0];
- }
- #else
- int j;
- for (j = 0;; ++j) {
- money += (min(i, INCOMESEG[j+1])-INCOMESEG[j])*RADIO[j];
- if (i < INCOMESEG[j + 1]) break;
- }
- #endif
- printf("%d", money);
- }
复制代码 |
|