【发布时间】: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 再加上分钟差。