반응형
숫자가 주어지면, 숫자에 있는 모든 자릿수의 합을 구할 수 있습니다. 예를 들어서 \(47 \to 4+7=11\)이 됩니다. 이 문제는 주어진 숫자 범위에 있는 모든 수에 대한 자릿수의 합을 구하는 것입니다.
이미 이 문제는 #1019에서 다루었던 것입니다. 단지 다른 것은 #1019 문제는 1부터 주어진 숫자까지의 자릿수 합이지만, 여기서는 시작하는 숫자가 주어진다는 것뿐입니다. #1019는 모든 자릿수들의 빈도를 출력하는 것이지만, 이 문제는 합을 표현하는 것입니다. 아이러니하게 #1019는 난이도가 Gold I 이지만, 이문제는 두단계 낮은 Gold III입니다.
https://www.acmicpc.net/problem/1081
문제의 풀이는 #1019 문제를 참고하세요.
소스는 #1019 문제와 대동소이합니다. 소스는 참고용으로 봐주세요.
//------------------------------------------------------------------------------
// baekjoon #1081 - Digit Sum
// - by Aubrey Choi
// - created at 2019-12-31
//------------------------------------------------------------------------------
#include <stdio.h>
// from #1019
long long sum(long long n)
{
if(n<=0) return 0;
long long c[10]={0,}, s=1, sum=0, t, r;
while(n>0)
{
t = n / (s * 10);
r = n % (s * 10);
for(int i = 0; i < 10; i++) c[i] += t*s;
for(int i = 1; i <= r / s; i++) c[i] += s;
c[(r/s+1)%10] += r % s;
n -= 9 * s;
s *= 10;
}
for(int i = 1; i < 10; i++) sum+=i*c[i];
return sum;
}
int main()
{
long long a, b;
scanf("%lld%lld", &a, &b);
printf("%lld\n",sum(b)-sum(a-1));
}
728x90
'Programming > BOJ' 카테고리의 다른 글
백준 #1094 막대기 (0) | 2020.01.01 |
---|---|
백준 #1083 소트(정렬) (0) | 2019.12.31 |
백준 #1074 Z (0) | 2019.12.30 |
백준 #1068 트리 (0) | 2019.12.30 |
백준 #1067 이동(FFT) (0) | 2019.12.30 |
댓글