C语言 如何正确计算和转换通话的开始时间和结束时间(以分钟为单位)?

1tuwyuhd  于 2022-12-11  发布在  其他
关注(0)|答案(2)|浏览(194)

开始和结束时间是基于24小时时钟格式的。任务是我们将输入开始和结束时间,然后我们将计算呼叫的长度,并将结果转换为分钟。
示例输出:开始时间:1810结束时间:2000通话时长:一百一十分钟
下面是我所做的尝试。首先,我试着减去开始和结束时间,然后自动地把答案变成正的。现在,如果总的结果(resultMain)大于120,则会将结果乘以否则如果结果大于60且小于120,那么它只会得到负40,而不是乘以(0. 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通话时长:六十一分钟
错误答案示例:开始时间:0852结束时间:0906通话时长:五十四分钟
错误答案示例:开始时间:0805结束时间:1210通话时长:二百四十三分钟

iih3973s

iih3973s1#

不需要任何浮点数
在减去之前,将时间分成小时和分钟

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\t: %d minutes\n", diff);
6l7fqoea

6l7fqoea2#

您可以使用此算法来计算两个时间之间的差异(以分钟为单位):

const MINS_PER_HR = 60, MINS_PER_DAY = 1440

startx = starthour * MINS_PER_HR + startminute
endx = endhour * MINS_PER_HR + endminute

duration = endx - startx
if duration < 0:
    duration = duration + MINS_PER_DAY

请参阅:Algorithm needed to calculate difference between two times
以下代码将为您实现它:

#include <stdio.h>

int main()
{
    int startTime, endTime, startHour, startMin, endHour, endMin, duration;
    
    printf("\nPLDT Telephone Call Charge\n");
    printf("\nStart time\t: ");
    scanf("%04d", &startTime);
    printf("End time\t: ");
    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\t: %d minutes\n", duration);

    return 0;
}

相关问题