문제링크
문제
옛날에는 책을 만들 때, 한글자 한글자를 나눠서 활자를 만들어서 그걸 합쳐서 책을 만들었다고 한다. 예를 들면 가나다라는 글씨를 쓰기 위해서는 3개의 활자가 필요할 것이다. 그렇다고 할 때, 1~N까지의 숫자를 활자로 표현하기 위해서는 몇 개의 활자가 필요한지 구하여라. 예를 들어 1~10까지의 숫자를 활자로 표현하려면 1,2,3,4,5,6,7,8,9,1,0 이렇게 11개의 활자가 필요할 것이다.
입력
첫째 줄에 N(1<=N<=2000000000)이 주어진다.
출력
첫째 줄에 필요한 활자의 수를 1234567로 나눈 나머지를 출력한다.
풀이
N까지 모든 수의 자리 수를 더해주는 것과 같은 문제다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#include <iostream>
using namespace std;
typedef long long ll;
int n;
ll result;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n;
ll num = 9;
int plus = 1; // 자리수
while (true) {
if (n > num) {
result = result + (num - num / 10 )* plus;
num = num * 10 + 9; // 9 -> 99 -> 999
plus++;
}
else {
num = num / 10;
result = result + (n - num) * plus;
break;
}
}
cout << result % 1234567;
}
|
cs |
메모
아래와 같은 문제다. (자료형만 바꿔서 제출해도 맞음)