鱼C论坛

 找回密码
 立即注册
查看: 2364|回复: 5

[已解决]c编程企业利润编制,输入100W以上的数就出负数是怎么回事

[复制链接]
发表于 2019-3-14 15:09:39 | 显示全部楼层    本楼为最佳答案   
这写法。。算了不吐槽了。。。
你最后一个case 0后面跟的语句是
  1. switch(i>1000000)
  2.                                                                    {
  3.                                                                            money=100000*0.1+100000*0.075+200000*0.05+600000*0.015+(i-1000000)*0.01;
  4.                                                                            break;
  5.                                                                    }
复制代码
没有case语句大括号里的语句是不会执行的。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-14 17:28:08 | 显示全部楼层
本帖最后由 Croper 于 2019-3-14 17:34 编辑

论如何强行使用switch
  1. #include <stdio.h>

  2. #ifndef min
  3. #define min(a,b)            (((a) < (b)) ? (a) : (b))
  4. #endif

  5. #define USE_SWITCH

  6. const int INCOMESEG[] = {0,100000,200000,400000,1000000,0x7FFFFFFF };
  7. const double RADIO[] = { 0.1,0.075,0.05,0.015,0.01 };

  8. int GetIncomeSeg(int i) {
  9.         const int N = sizeof(INCOMESEG) / sizeof(int);
  10.         int p = 0, q = N;
  11.         while (p < q) {
  12.                 int n = (p + q) / 2;
  13.                 if (i >= INCOMESEG[n]) p = n + 1;
  14.                 else q = n;
  15.         }

  16.         return p;
  17. }

  18. int main() {
  19.         int i;
  20.         int money = 0;
  21.         printf("please input the i\n");
  22.         scanf("%d", &i);

  23. #ifdef USE_SWITCH
  24.         int seg = GetIncomeSeg(i);
  25.         switch (seg) {
  26.         case 5:
  27.                 money += (i - INCOMESEG[5])*RADIO[4];
  28.                 i = INCOMESEG[4];
  29.                 //no break;
  30.         case 4:
  31.                 money += (i - INCOMESEG[3])*RADIO[3];
  32.                 i = INCOMESEG[3];
  33.                 //no break;
  34.         case 3:
  35.                 money += (i - INCOMESEG[2])*RADIO[2];
  36.                 i = INCOMESEG[2];
  37.                 //no break;
  38.         case 2:
  39.                 money += (i - INCOMESEG[1])*RADIO[1];
  40.                 i = INCOMESEG[1];
  41.                 //no break;
  42.         case 1:
  43.                 money += i * RADIO[0];
  44.         }
  45. #else
  46.         int j;
  47.         for (j = 0;; ++j) {
  48.                 money += (min(i, INCOMESEG[j+1])-INCOMESEG[j])*RADIO[j];
  49.                 if (i < INCOMESEG[j + 1]) break;
  50.         }
  51. #endif
  52.         printf("%d", money);
  53. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-6 03:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表