【问题标题】:How do I properly compute and convert the starting time and ending time of the call in minutes?如何以分钟为单位正确计算和转换通话的开始时间和结束时间?
【发布时间】:2022-12-11 06:25:40
【问题描述】:

开始和结束时间基于 24 小时制。任务是我们将输入开始和结束时间,然后我们将计算通话时长并将结果转换为分钟。

示例输出: 开始时间:1810 结束时间:2000 通话时长:110分钟

这是我尝试做的事情。首先,我尝试减去开始和结束时间并自动将答案变为肯定。现在,如果总结果 (resultMain) 大于 120,它会将结果乘以 (.60)。否则,如果结果大于 60 且小于 120,则它只会得到负 40 而不是乘以 (.60)。我的问题是我的结果不一致,有时答案是正确的,有时是错误的。

#include <stdio.h>
#include <math.h>
#include <string.h>
int main()
{
    int startTime, endTime, result1, result2;
    double totalTime1, totalTime2, resultMain;
    
    printf("\nPLDT Telephone Call Charge\n");
    printf("\nStart time\t: ");
    scanf("%d", &startTime);
    printf("End time\t: ");
    scanf("%d", &endTime);

    totalTime1 = startTime - endTime;
    resultMain = fabs(totalTime1);
    
    if(resultMain >= 120){
        
    totalTime2 = resultMain * .60;
    result1 = ceil(totalTime2); 
    result2 = fabs(result1);
    
    printf("Length of call\t: %d minutes\n", result2);
    }else if(resultMain >= 60 && resultMain < 120){

        totalTime2 = resultMain - 40;
        result1 = ceil(totalTime2);
        result2 = fabs(result1);

        printf("Length of call\t: %d minutes\n", result2);
    }else{
        totalTime2 = resultMain;
        result1 = ceil(totalTime2);
        result2 = fabs(result1);
        
        printf("Length of call\t: %d minutes\n", result2);
    }
   return 0;
    }

正确答案示例: 开始时间:0123 结束时间:0224 通话时长:61分钟

错误答案示例: 开始时间:0852 结束时间:0906 通话时长:54分钟

错误答案示例: 开始时间:0805 结束时间:1210 通话时长:243分钟

【问题讨论】:

  • 您的输入是整数,您的输出是整数。这里不需要任何浮点运算或函数。
  • 您在哪里将时间输入转换为原始纪元分钟?
  • 此外,要获得开始时间和结束时间之间的差值,请反转减法:endTime - startTime
  • 但是要进行正确的计算,您确实需要将小时和分钟从输入中分离出来。例如startHours = startTime / 100; startMinutes = startTime % 100;。然后分别处理小时和分钟。
  • 一旦将小时和分钟分开,您的计算方式类似于您在学校学习带溢出的十进制减法:如果分钟差为负,则将其加 60 并从小时差中减去一个(进位!)。最终结果将是小时差乘以 60 再加上分钟差。

标签: c math


【解决方案1】:

不需要任何浮点数学

在减法之前,将时间分成小时和分钟

int startTime_hours = startTime/100;
int startTime_mins = startTime%100;
startTime_mins += startTime_hours*60; // startTime_mins is now the total minutes.

区别是结束减去开始

int diff = endTime_mins - startTime_mins;

当差异为负时,增加一天的时间

示例:开始时间刚好在午夜之前,结束时间在午夜之后。

if (diff < 0) {
  diff += 24*60;
}

只需 1 个案例即可打印

printf("Length of call	: %d minutes
", diff);

【讨论】:

    【解决方案2】:

    此代码将为您完成:

    #include <stdio.h>
    
    int main()
    {
        int startTime, endTime, startHour, startMin, endHour, endMin, duration;
        
        printf("
    PLDT Telephone Call Charge
    ");
        printf("
    Start time	: ");
        scanf("%04d", &startTime);
        printf("End time	: ");
        scanf("%04d", &endTime);
    
        startHour = startTime / 100;
        startMin  = startTime % 100;
        endHour   = endTime / 100;
        endMin    = endTime % 100;
        duration  = (endHour * 60 + endMin) - (startHour * 60 + startMin);
        if (duration < 0)
            duration += 60 * 24;
        printf("Length of call	: %d minutes
    ", duration);
    
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-17
      • 1970-01-01
      • 1970-01-01
      • 2022-12-16
      相关资源
      最近更新 更多