【问题标题】:compounding / while loops复合/while循环
【发布时间】:2011-07-05 11:53:15
【问题描述】:
#include <stdio.h>

int main(void)
{
  int days, hours, mins;
  float a, b, c, total, temp, tempA, tempB;

  a = 3.56;
  b = 12.50;
  c = 9.23;
  total = a+b+c;
  days = total / 24;

  temp = total/24 - days;

  hours = temp * 24;

  tempA = temp*24 - hours;

  mins = tempA*60;

  while (hours >= 24)
    {
      hours= hours-24;
      days +=1;
    }
  while  ( mins >= 60)
    {
      mins=mins-60;
      hours +=1;
    }
  printf("days:%d\n", days);
  printf("hours:%d\n", hours);
  printf("mins:%d\n", mins);


  return 0;
}

我想将十进制小时数转换为实时时间,我可以做得很好,但如果小时数超过 24 并且分钟数超过 60 分钟,我想增加天数。 while 循环确实减去并打印出新值,但小时/天并没有变得复杂。 这是 1 天 1 小时 77 分钟 我想让它读 1 天 2 小时 17 分钟 但我得到 1 天 1 小时 17 分钟。

【问题讨论】:

  • 你可能想手动检查你的数学; 3.56+12.5+9.23 == 25.29,比一天长1.29 小时。
  • 嗯是的,我认为我的数学错了
  • 您避免使用 mod 运算符 % 的任何特殊原因?有了它,您的实现会变得更加简单。
  • 在 c 书中还没有走那么远,所以这就是为什么我没有用它来做例子。

标签: c compound-assignment


【解决方案1】:

这是您尝试做的更简单的实现:

void TimeFix(int &days, int &hours, int &mins)
{
    hours += mins/60;
    mins %= 60;
    days += hours/24;
    hours %= 24;
}

【讨论】:

    【解决方案2】:

    你可以使用除法来代替while循环:

    days += hours / 24
    hours %= 24
    

    另外,在你的小时到天的事情之前做你的分钟到小时的事情。

    【讨论】:

      【解决方案3】:

      使用模数运算符会让您的生活更轻松:它会给出除法的余数。

      int total;
      
      /* a=; b=; c=; assignments */
      
      total = a+b+c;
      mins = total % 60;
      total /= 60;
      hours = total % 24;
      days = total / 24;
      

      【讨论】:

        【解决方案4】:

        它工作正常,你的数学只是有点偏离。 (= (+ 3.56 12.50 9.23) 25.29),不是 26.29。

        【讨论】:

          【解决方案5】:

          运行你的程序我得到:

          days:1
          hours:1
          mins:17
          

          考虑到总数应该是 25.29,这就是我所期望的。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-03-23
            • 1970-01-01
            • 2020-09-18
            • 2013-05-09
            • 2020-08-19
            • 2013-05-21
            • 1970-01-01
            • 2022-06-15
            相关资源
            最近更新 更多