알고리즘 문제

[C/C++ 백준 1748번] 수 이어 쓰기 1 (Silver 3)

새파란 공대생 2020. 7. 22. 13:01

https://www.acmicpc.net/problem/1748

 

1748번: 수 이어 쓰기 1

첫째 줄에 N(1≤N≤100,000,000)이 주어진다.

www.acmicpc.net

처음에는 그냥 for문을 N까지 돌려도 되지 않을까 했었는데, N 범위가 꽤 커서 N 앞까지는 미리 계산해주어야 한다.

코드는 다음과 같다.

 

#include <cstdio>
#include <cmath>
using namespace std;
int main(void){
	long long int N, save,ans=0,length=0;
	scanf("%lld", &N);
	save = N;
	while(N){
		N = N/10;
		length++;
	}
	for(int i=1; i<length; i++)
		ans += 9*i*(int)pow(10.0,(double)(i-1));
	ans += length * (1 + save - (int)pow(10.0,(double)(length-1)));
	printf("%d",ans);
}