コツコツ学習ブログ

プログラマのweb上のメモ的なもの

ABC 266  B - Modulo Number

ABC 266 に参加した。

あと一歩で解けず、他の方の回答を見て悶絶したので自戒のため、次回のために

編集しておく

atcoder.jp

基本的に全探索+ 倍数判定で解ける問題なのだが、

出力例が一致せずつまってしまった。

■正解例

 for (long i = 0; i <= 998244353; i++) {
 if ( (N-i)% 998244353 == 0) {
 System.out.println(i);
 return;
 }

■誤答例

 for (int i = 0; i <= 998244353; i++) {
 int num = (int) (N - i);
 if (998244353 % num == 0) {
 System.out.println(i);
 return;
 }

何度やっても全問ACにならず、色々こねくり回したのだが

結果的にアルゴリズムは単純で、標準入力で受け取った値を

for文でループする際にintにキャストしてしまったのが原因だった。

凡ミス、、普段ループを回すときにintでしか回さない為

えがおよばなかった。

Longを扱う試験は今後もでるから気をつけよう

ちなみにだが、公式の動画で言及していたのだが、

入力値N を倍数判定の対象となる数で割ることでもxを求められる。

こちらの方がアルゴリズム的にシンプル。

**を~~で割ったあまりを求める、というのはよく出るらしいので次はすぐ解けるようにしたい。 ※下記はサンプル

       long res = in % min;
        if(in < 0 && res != 0)
        {
             res = min - Math.abs(res);
        }