- - PR -
数値の範囲特定
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-02-16 12:40
うまく説明できないのですが、メソッドを作りたいのです。
int start; int end; void getStartEnd(int num){ start = end = } 引数の数値が999間隔でどこから、どこまでの値かを知りたいのです、 ただし数値の開始は1からなので1〜999間の数値に関しては998間隔になります。 例えば引数が5場合、start = 1 end = 999となり 例えば引数が1001の場合、start = 1000, end = 1999となり 例えば引数が21345の場合、start = 21000, end = 21999となる どのような判定をメソッド内で行えばよいのでしょうか? | ||||
|
投稿日時: 2004-02-16 12:58
NAL-6295です。
簡単に考えると・・・。
でいかがでしょうか。 | ||||
|
投稿日時: 2004-02-16 13:01
999が基準ですから、単純に999で割るとどうかと・・・
int start; int end; void getStartEnd(int num){ num = num / 999; if(num == 0){ start = 1; end = num + 999; } else { start = num * 1000; end = start + 999; } } | ||||
|
投稿日時: 2004-02-16 13:12
999 を与えると、start=1000 になるので仕様を満たさないのでは? | ||||
|
投稿日時: 2004-02-16 14:19
最初のグループは例外的ですが、第二グループ以降1000進数的な振る舞いをしますから、基準は1000で良いのだと思いますよ。 実装は NAL-6295さん の提示されているコードが一般的でしょうね。 〔補足〕 1000進数は999から1000になる時に桁が繰り上がる。 この場合の桁の繰り上がりとは、1つ大きい集合(範囲)に属する事を意味する。 | ||||
|
投稿日時: 2004-02-16 14:22
あぁ、なるほどー
確かに(笑) 捻りが足りませんでしたな。 int start, end; n = n / (999 + 1); if(n == 0){ start = 1; end = n + 999; } else { start = n * 1000; end = start + 999; } | ||||
|
投稿日時: 2004-02-16 15:09
NAL-6295さん、コブラさん、ふーばーさん、でゅうくさん、ご意見ありがとうございました。
ご丁寧にソースまでご提示いただき感謝します。 参考にさせていただきます。 | ||||
1
