0

在 C 中,我如何使 1200 / 500 = 3。

我正在做家庭作业。

运输计算器:Speedy Shipping 公司将根据包裹的重量和您发送包裹的距离来运送您的包裹。他们只会运送不超过 10 磅的小包裹。您需要有一个程序来帮助您确定他们将收取多少费用。费用基于每运送 500 英里。它们不是按比例计算的,即 600 英里与 900 英里的费用相同。

这是他们给你的表格:

Package Weight--------------------------Rate per 500 miles shipped

2 pounds or less------------------------$1.50

More than 2 but not more than 6---------$3.70

More than 6 but not more than 10--------$5.25

这是一个测试用例。

测试用例数据:

重量:5.6 磅
英里:1200 英里

预期成绩:

您的运费为 11.10 美元


我的回答一直到 7.40

4

6 回答 6

12

你是想收拾残局吗?在除法之前,您可以将 499 添加到要除法的数字上。

(0 + 499) / 500 -> 0

(1 + 499) / 500 -> 1

(1200 + 499) / 500 -> 3

这将四舍五入。

于 2012-06-25T19:03:55.823 回答
6

假设您想a通过b(在您的示例中a = 1200为 b = 500)获得上限。你可以像这样用整数算术来做。

result = (a + b - 1) / b;

或者您可以使用浮点数并这样做(可能是个坏主意)

result = (int) ceil( (double) a / b );

问题是,由于这是一个家庭作业,你可以通过小步骤完成它:

if( a % b == 0 ) {
    result = a / b;
} else {
    result = a / b + 1;
}

这段代码的另一个优点是它实际上不会溢出太大a的 s,但我猜这在这种情况下无关紧要。

于 2012-06-25T19:04:16.117 回答
0

您还可以使用 stdlib div 函数。如果您只想要整数数学并且特别想要避免浮点数学,这可能会很好。

http://www.cplusplus.com/reference/clibrary/cstdlib/div/

#include <stdlib.h>

int foo(void)
{
  div_t result = div(1200, 500);
  return result.quot + (0 < result.rem); 
}
于 2012-06-25T19:18:03.203 回答
0

[编辑1]

从您的代码中,您将按如下方式实现此部分:

if ( weight <= 5.6 )
{
    int multiplier = (int) miles / 500;

    if( ((int)miles % 500) > 0)
        multiplier++;

    rate370 = (double)multiplier * 3.7;

    printf("Your total cost : %.2lf\n", rate370);      
}

[ORIGINAL] 在“整数土地”中,1200 / 3 应该等于 2。

对于你想要的“看起来”,试试这个:

int multFiveHundreds = (int)totalWeight / 500;
if(multFiveHundreds % 500 > 0)
    multFiveHundreds++;
于 2012-06-25T19:04:54.200 回答
0

我建议使用 mod 和 truncate 函数。如果 mod 出来为零,那很好,否则截断并加 1。

于 2012-06-25T19:05:52.627 回答
0

您必须使用分区的天花板。这会将商四舍五入到下一个整数。

因此,当您尝试查找 500 英里增量的数量时,您必须将商四舍五入到下一个整数。

或者,(而且效率低下),您可以将英里数增加1,直到它可以被500...整除,即 while ( (q = x_miles++%500) != 0 ) {} 。然后乘以q费率得到你的答案(这也假设你将有一个整数英里)。

于 2012-06-25T19:09:27.267 回答