[백준] 1748번 수 이어 쓰기 1 / C++

#문제

백준 1748번 수 이어 쓰기 1

#풀이

#include <iostream>

using namespace std;

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	int n;
	cin >> n;

	long long sum = 0;
	int digit = 1;
	int startNum = 1;

	while (true)
	{
		int endNum = startNum * 10 - 1;

		if (n < endNum)
		{
			sum += (n - startNum + 1) * digit;
			break;
		}
		else
		{
			sum += (endNum - startNum + 1) * digit;
		}

		startNum *= 10;
		digit++;
	}

	cout << sum;

	return 0;
}

#정리

1부터 n까지의 수를 이어쓰면 새로운 수를 얻을 수 있는데, n의 자리수를 출력하는 문제.(ex. n == 11, 1234567891011, 13출력) 1-9까지는 1자리, 10-99까지는 2자리, 100-999까지는 3자리임을 알 수 있다. 10을 넘길 때, 100을 넘길 때 그 전까지의 자리수를 한 번에 더해주면 빠르게 숫자를 출력 가능하다. 이를 활용해 수식을 작성하여 해결했다.




    Enjoy Reading This Article?

    Here are some more articles you might like to read next:

  • [백준] 9613번 GCD 합 / C++
  • [백준] 10816번 숫자 카드 2 / C++
  • [백준] 10610번 30 / C++
  • [백준] 1010번 다리 놓기 / C++
  • [백준] 11659번 구간 합 구하기 4 / C++