diff options
author | Raphael McSinyx <vn.mcsinyx@gmail.com> | 2016-10-08 09:56:43 +0700 |
---|---|---|
committer | Raphael McSinyx <vn.mcsinyx@gmail.com> | 2016-10-08 09:56:43 +0700 |
commit | 2a7bc10f6c011d19fb3b0e73068f7e1a9c30ace0 (patch) | |
tree | 95190a32ec1c7098494849eea5a5ba6b53289585 /NTU/circlenum.c | |
parent | 207cc2ae9893b0cdecd20119b9ede37f73cd4a1e (diff) | |
download | cp-2a7bc10f6c011d19fb3b0e73068f7e1a9c30ace0.tar.gz |
Initial commit
Diffstat (limited to 'NTU/circlenum.c')
-rw-r--r-- | NTU/circlenum.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/NTU/circlenum.c b/NTU/circlenum.c new file mode 100644 index 0000000..408bea0 --- /dev/null +++ b/NTU/circlenum.c @@ -0,0 +1,53 @@ +#include <stdio.h> + +const long long INTPOW10[] = {1, 10, 100, 1000, 10000, 100000, 1000000, + 10000000, 100000000, 1000000000, 10000000000, + 100000000000, 1000000000000, 10000000000000, + 100000000000000, 1000000000000000, + 10000000000000000, 100000000000000000, + 1000000000000000000}; + +char intlog10(long long n) +{ + char val = 0; + while (n > 9) { + n /= 10; + val++; + } + + return val; +} + +char isnt_circle(long long n) +{ + return n % 10 != n / INTPOW10[intlog10(n)]; +} + +int main() +{ + long long l, r; + scanf("%lld %lld", &l, &r); + while (isnt_circle(l)) + l++; + while (isnt_circle(r)) + r--; + + char llog = intlog10(l); + char rlog = intlog10(r); + long long l0, r0, val = 0; + for (char i = llog; i <= rlog; i++) { + l0 = INTPOW10[i] + 1; + l0 = (l0 > l) ? l0 : l; + r0 = INTPOW10[i + 1] - 1; + r0 = (r0 < r) ? r0 : r; + r0 -= l0; + if (r0 >= 0) { + val++; + val += (r0 < 10) ? r0 : (r0 / 10); + } + } + + printf("%lld\n", val); + + return 0; +} |