1748번: 수 이어 쓰기 1 (acmicpc.net)
1748번 : 수 이어 쓰기 1
1부터 N까지의 수를 이어서 쓰면 다음과 같이 새로운 하나의 수를 얻을 수 있다.
1234567891011121314151617181920212223...
이렇게 만들어진 새로운 수는 몇 자리 수일까? 이 수의 자릿수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N(1 ≤ N ≤ 100,000,000)이 주어진다.
출력
첫째 줄에 새로운 수의 자릿수를 출력한다.
생각해 볼 점
1의 자리 수 : 9개
10의 자리 수 : 90개
100의 자리 수 : 900개
위와 같이 생각하면서
자릿수와 갯수를 곱하여 더하면 됩니다.
예시 : 55
1 ~ 9 => 1의 자리수
9 * 1 = 9
55 - 9 = 46개 남음
-------------------------------------
10 ~ 55 => 10의 자리수
46 * 2 = 92
총 9 + 92 = 101
101이 정답입니다.
코드
#include <iostream>
int main()
{
int N;
scanf("%d", &N);
//21억을 넘을 것이므로 long long
long long ans = 0;
//더할 자릿수 (10의 자리 계산시 2)
long long count = 1;
//자릿수의 갯수 (10의 자리는 90개)
long long digit = 9;
//자릿수를 올려가며 갯수 세기
while(digit < N)
{
N -= digit;
ans += count * digit;
digit *= 10;
count++;
}
ans += count * N;
printf("%lld", ans);
return 0;
}
그 외
'공부 및 정리 > 백준 코드' 카테고리의 다른 글
최근 백준 코드 정리는 노션에 있습니다. (0) | 2023.01.16 |
---|---|
[C++] 백준 - 2193번 문제 (0) | 2023.01.07 |
[C++] 백준 - 11656번 문제 (0) | 2023.01.04 |
[C++] 백준 - 10610번 문제 (0) | 2022.12.23 |
[C++] 백준 - 11056번 문제 (1) | 2022.12.21 |