- PR -

数値の範囲特定

1
投稿者投稿内容
ボム
ベテラン
会議室デビュー日: 2003/07/25
投稿数: 61
投稿日時: 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となる

どのような判定をメソッド内で行えばよいのでしょうか?
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2004-02-16 12:58
NAL-6295です。

簡単に考えると・・・。
コード:
 start = num - (num % 1000);
 end = start + 999;
 if(start == 0)
 {
    start = 1;
 }


でいかがでしょうか。
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 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;
}
}
ふーばー
大ベテラン
会議室デビュー日: 2003/06/05
投稿数: 163
投稿日時: 2004-02-16 13:12
引用:

コブラさんの書き込み (2004-02-16 13:01) より:
999が基準ですから、単純に999で割るとどうかと・・・



999 を与えると、start=1000 になるので仕様を満たさないのでは?
でゅうく
大ベテラン
会議室デビュー日: 2003/11/30
投稿数: 129
投稿日時: 2004-02-16 14:19
引用:

コブラさんの書き込み (2004-02-16 13:01) より:
999が基準ですから、単純に999で割るとどうかと・・・


最初のグループは例外的ですが、第二グループ以降1000進数的な振る舞いをしますから、基準は1000で良いのだと思いますよ。
実装は NAL-6295さん の提示されているコードが一般的でしょうね。

〔補足〕
1000進数は999から1000になる時に桁が繰り上がる。
この場合の桁の繰り上がりとは、1つ大きい集合(範囲)に属する事を意味する。
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 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;
}
ボム
ベテラン
会議室デビュー日: 2003/07/25
投稿数: 61
投稿日時: 2004-02-16 15:09
NAL-6295さん、コブラさん、ふーばーさん、でゅうくさん、ご意見ありがとうございました。

ご丁寧にソースまでご提示いただき感謝します。
参考にさせていただきます。

1

スキルアップ/キャリアアップ(JOB@IT)