桁数を数えるときに気をつけること
例えばの桁数をループを回しながら数えていくとき(かぞえた桁数は配列digitsにしまうものとする)。
#define _USE_MATH_DEFINES #include "bits/stdc++.h" using namespace std; #define rep(i, n) for (ll i = 0; i < (ll)(n); i++) typedef long long ll; int main() { vector<int> digits(1000); ostringstream oss; string s; for (int i = 1; i <= 1000; i++) { oss.str(""); //初期化する! oss << i; s = oss.str(); digits.at(i - 1) = s.size(); } cout << digits.at(9); }
ソースコード中にも書いたが,使ったostringstreamはループのたびに初期化する必要があることに注意。もちろん,桁数を数える関数を作っても良い。というか,こっちのほうが2, 3倍早かったっぽい:
int digit(int x) { int counter = 0; while (x != 0) { counter++; x /= 10; } return counter; }
問題文によって2つは見極めて使っていこうと思う。