In c , how do I make 1200 / 500 = 3

两盒软妹~` 提交于 2019-12-08 09:13:07

问题


In C , how do I make 1200 / 500 = 3.

I'm doing a homework assignment.

Shipping Calculator: Speedy Shipping company will ship your package based on how much it weighs and how far you are sending the package. They will only ship small packages up to 10 pounds. You need to have a program that will help you determine how much they will charge. The charges are based on each 500 miles shipped. They are not pro-rated, i.e., 600 miles is the same charge as 900 miles.

Here is the table they gave you:

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

Here is one test case.

Test Case Data:

Weight: 5.6 pounds
Miles: 1200 miles

Expected results:

Your shipping charge is $11.10


My answer keeps coming out to 7.40


回答1:


Are you trying to round up? Before dividing, you could add 499 to the number that is being divided.

(0 + 499) / 500 -> 0

(1 + 499) / 500 -> 1

(1200 + 499) / 500 -> 3

This will round up.




回答2:


Say you want to get a ceiling division a by b (in your example a = 1200 b = 500). You can do it in integer arithmetic like this.

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

Or you could use floating point numbers and do it like this (probably a bad idea)

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

The thing is that as this is a homework, you could just make it up in small steps:

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

Another advantage of this code is that it actually doesn't overflow for too big as, but this is not relevant in this case, I guess.




回答3:


I'd suggest using the mod and truncate functions. If mod comes out zero, it's fine, otherwise truncate and add 1.




回答4:


You have to use the ceiling of the division. This will round the quotient up to the next integer.

So when you are trying to find the number of 500-mile increments, you have to round the quotient up to the next integer.

Alternatively, (and inefficiently), you could increment the number of miles by 1, until it is divisible by 500...that is, while ( (q = x_miles++%500) != 0 ) {} . Then multipy q by the rate to get your answer (That is also assuming you will have an integer number of miles).




回答5:


You could also use the stdlib div function. This might be nice if you only wanted integer math and specifically wanted to avoid floating point math.

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); 
}



回答6:


[EDIT1]

From your code you would implement this part as follows:

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] In "integer land" 1200 / 3 should equal to 2.

for what it "seems" you want try this:

int multFiveHundreds = (int)totalWeight / 500;
if(multFiveHundreds % 500 > 0)
    multFiveHundreds++;


来源:https://stackoverflow.com/questions/11195590/in-c-how-do-i-make-1200-500-3

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!