abc165_cの解き方の解説 C++で整数をそのまま表示する方法 小数も
2020/05/20 14:05
感謝の正拳突き1万回ならぬ、競プロサイトで 1 日 1AC(正解)するように頑張る。
今日はAtCoder Beginner Contest 165 の C 問題です。
同じ C 問題でも(昨日の 165 の C 問題)[/2020191ac]と比べるとやけに簡単なような・・? 入力例 1 の解説のとおり立方体が一番体積が大きくなるので、L を 3 で割れば AC。ループもないし簡単すぎて不安になった。
#include <bits/stdc++.h>
using namespace std;
double l;
int main() {
cout << fixed << std::setprecision(20);
cin >> l;
l /= 3;
cout << l * l * l;
}
おまじない
C++で数学系の問題のときは、おまじないとして次のコードをつけるのが競プロ専用の普段役に立たないノウハウ。float や double などの浮動小数点型の場合、桁が非常に大きいか小さい場合に指数表記になってしまうが、(std::fixed)[https://cpprefjp.github.io/reference/ios/fixed.html]を渡すと指数表記ではなくなる。デフォルトの表示制度は小数点以下 6 位なので、std::setprecision(n)で桁数を設定できる。
cout << fixed << std::setprecision(20);
#include <bits/stdc++.h>
using namespace std;
int main() {
// 何も指定しないと指数表記になる
for(double i = 0.000000001; i <= 100000000000000000; i *= 10)
cout << i << endl;
// fixedを渡しておくと、指数表記にならなくなるが、小数点6位までしか表示されない
cout << fixed;
for(double i = 0.000000001; i <= 100000000000000000; i *= 10)
cout << i << endl;
// setprecisionしておくと、表示する桁数が増える。浮動小数点型の精度が上がるわけではない。
cout << std::setprecision(20);
for(double i = 0.000000001; i <= 100000000000000000; i *= 10)
cout << i << endl;
}