0

C では、どうすれば 1200 / 500 = 3 になりますか。

宿題をやっています。

配送計算ツール: 迅速な配送会社は、パッケージの重量と配送先の距離に基づいて、パッケージを発送します。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

ここに 1 つのテスト ケースがあります。

テスト ケース データ:

重量: 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

(あなたの例ではb = )で天井分割aを取得したいとします。このような整数演算で実行できます。ba = 1200500

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

または、浮動小数点数を使用してこのようにすることもできます (おそらく悪い考えです)。

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

問題は、これは宿題なので、小さなステップで作成できるということです。

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

このコードのもう 1 つの利点は、実際にはas が大きすぎてもオーバーフローしないことですが、これはこの場合には関係ないと思います。

于 2012-06-25T19:04:16.117 に答える
0

mod および truncate 関数を使用することをお勧めします。mod が 0 の場合は問題ありませんが、それ以外の場合は切り捨てて 1 を追加します。

于 2012-06-25T19:05:52.627 に答える
0

区画の天井を使用する必要があります。これにより、商が次の整数に丸められます。

したがって、500 マイルの増分数を見つけようとするときは、商を次の整数に切り上げる必要があります。

1別の方法として (非効率的ですが)、で割り切れるまでマイル数を ずつ増やすこともできます。500つまり、 while ( (q = x_miles++%500) != 0 ) {} です。次にq、レートを掛けて答えを取得します(これは、整数のマイルがあることも前提です)。

于 2012-06-25T19:09:27.267 に答える
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);      
}

[オリジナル] 「整数ランド」では、1200 / 3 は 2 に等しいはずです。

あなたがこれを試してみたいと「思われる」もののために:

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