答えて
%はモジュロ(剰余)演算子です。あなたのケースでは、試してみてください:
int weeks = total_days/7;
int remaining_days = total_days % 7;
実際には、合計日数を7で割ると、その週が得られます。 あなたは7で合計日数をモジューロすることができます。残りの日数を取得します。 これは十分ではありません
%(モジュラス演算子)は残りを与えます。したがって、%7日は週に変換した後に残された日数を与えます。つまり、日数が15の場合、%7の日数は1になります。
奇妙なことに、「私は知っています」と言われると、しばしば間違っています。 はモジュラス(%
)を必要としません。
int weeks = total_days/7;
printf("%d days is equal to %d weeks and %d days.\n",
total_days, weeks, total_days - weeks*7);
モジュラスを使用する方が簡単で高速ですが。 – Olhovsky
@TheBigO、もっと簡単かもしれませんが、モジュラスの実装では内部的に同じ式を使用し、コンパイラの最適化が本当に良い場合を除いて、おそらく7で除算を繰り返すことになります。 –
@ Karl:一部のCPUは、単一の命令で商と剰余の両方を見つけることができます。しかし、ここでは定数による除算があるので、コンパイラの最適化があれば、マジックナンバーとビットシフトによる乗算を使って '週'を計算し、整数除算は必要ありません。 @TheBigO:コンパイラは 'total_days%7'を同じコードに最適化することができます。モジュロを使用しない主な目的は、問題の質問者に問題を考えるように挑戦し、モジュロの使用が宿題であるか、単に「聞いたことが必要なのか」を教えてください。 –
宿題に関する質問? – Sean