1부터 N까지의 수를 이어서 쓰면 다음과 같이 새로운 하나의 수를 얻을 수 있다.
1234567891011121314151617181920212223...
이렇게 만들어진 새로운 수는 몇 자리 수일까? 이 수의 자릿수를 구하는 프로그램을 작성하시오.
1+1+...1+2+2+2+....3+3+3...
으로 계산하고 있으면 안된다는 소리다.#include <iostream>
#include <cmath>
using namespace std;
int N;
// N의 자릿수를 구하는 함수
int getStandingNum() {
int ret = 1;
while(true) {
if (N < pow(10, ret)) break;
ret++;
}
return ret;
}
int main( ) {
ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
cin >> N;
int alpha = getStandingNum(); // 자릿수를 구한다.
long long ans = 0; // long long 타입을 사용해야 한다.
while (alpha > 0) {
ans += ((N - pow(10, alpha - 1) + 1) * alpha); // alpha 자릿수인 숫자 개수
N -= (N - pow(10, alpha - 1) + 1); // N의 자릿수를 낮춰준다.
alpha--; // 자릿수를 낮춘다.
}
cout << ans << '\n';
}