演算子の優先度の重要性


今日は演算子の優先度の重要性についてお話しします.二項係数に関する問題に触れたとき,白駿が二項係数を解いたときに以下の興味深い問題を発見した.
3651白駿
最初は二項係数DPの解法を簡単に使っただけでしたが、O(N^2)時間の複雑さはタイムアウト結果が出たことでどうやって解決するか悩んだ時に、次のブログの助けを得ました.
3651百俊解答解说
質問に答えた後、いくつかのpassコードを見て、より簡潔な論理コードを見つけて理解し、その上で質問を再解答し、結果は以下の通りです.

本当に分かりません.私の頭の中で考えていることは全然間違っていないからです.念のため参考にしたコードを読み続けましたが、どこが間違っているのか理解できません.様々な推測を検証する過程で、疑いが生じ始めた.
long long nCk(long long n, int k) {
    double res = n - k + 1;
    for(int i = 2; i <= k; i++) {
    	res *= (n - k + i) / i; // 처음 작성한 코드
     //   res = res * (n - k + i) / i;
    }
    if(res > pow(10, 16)) return (long long) pow(10, 16);
    return (long long) res;
}
この係数を求める関数では、for文の演算子は異なる形式で使用され、元の演算子の優先度は、/優先、次いで=演算子です.(C言語演算子ランキング)このように、この構文では/まず実行されるので、演算中にエラーが発生し、小数点の発生によって全く予想されなかった計算値を返すことができる.このセクションを*演算子に変換すると、次の注釈処理のセクションと同様にスムーズに通過できます.

これにより、単純なアルゴリズムの問題が解決されるだけでなく、プロジェクトでは演算子の優先度が予想外の値を生じる可能性があるため、演算には特に注意しなければならない.