符号に関係なく、正の定数で割った実数を最も近い整数に揃える必要があります。例は次のとおりです(ここで、バックスラッシュは目的の演算子を表します)
21,5 \ 2 = 10
-21,5 \ 2 = -11
52,3 \ 2 = 26
-52,3 \ 2 = -27
これを行う短い演算子はありますか? 通常の "スラッシュ" ( "/" ) 演算子は、C++ (少し前に標準化された) ではゼロに向かって丸められます (例: -52.6 / 2 = -26)。
符号に関係なく、正の定数で割った実数を最も近い整数に揃える必要があります。例は次のとおりです(ここで、バックスラッシュは目的の演算子を表します)
21,5 \ 2 = 10
-21,5 \ 2 = -11
52,3 \ 2 = 26
-52,3 \ 2 = -27
これを行う短い演算子はありますか? 通常の "スラッシュ" ( "/" ) 演算子は、C++ (少し前に標準化された) ではゼロに向かって丸められます (例: -52.6 / 2 = -26)。
std::floor
あなたの問題を解決します。
#include <iostream>
#include <cmath>
using namespace std;
int main() {
// your code goes here
float i = -21.5,b=2;
int c = std::floor(i/b);
cout << c << endl;
i = 21.5,b=2;
c = std::floor(i/b);
cout << c << endl;
int a = 11,b1 =2;
c = std::floor(a/b1);
cout << c << endl;
a = -11;
b =2.1;
c = std::floor(a/b);
cout << c << endl;
return 0;
}
出力:
-11
10
5
-6
特別な演算子はありませんが、特別な型を作成して、適切な演算子を再定義できます。
#include <iostream>
#include <cmath>
template<class Integer>
struct RoundDown
{
RoundDown(Integer v) : value_(v) {}
operator Integer&() { return value_; }
operator const Integer&() const { return value_; }
template<class Other>
RoundDown& operator/=(Other const& o)
{
value_ = Integer(std::floor(double(value_) / o));
return *this;
}
Integer value_;
};
template<class IntegerL, class IntegerR>
auto operator/(RoundDown<IntegerL> l, IntegerR const& r)
{
return l /= r;
}
int main()
{
RoundDown<int> a { -57 };
a /= 2;
std::cout << a << '\n';
std::cout << (a / 2) << '\n';
}
期待される出力:
-29
-15