about summary refs log tree commit diff
path: root/NTU/circlenum.c
diff options
context:
space:
mode:
authorRaphael McSinyx <vn.mcsinyx@gmail.com>2016-10-08 09:56:43 +0700
committerRaphael McSinyx <vn.mcsinyx@gmail.com>2016-10-08 09:56:43 +0700
commit2a7bc10f6c011d19fb3b0e73068f7e1a9c30ace0 (patch)
tree95190a32ec1c7098494849eea5a5ba6b53289585 /NTU/circlenum.c
parent207cc2ae9893b0cdecd20119b9ede37f73cd4a1e (diff)
downloadcp-2a7bc10f6c011d19fb3b0e73068f7e1a9c30ace0.tar.gz
Initial commit
Diffstat (limited to 'NTU/circlenum.c')
-rw-r--r--NTU/circlenum.c53
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;
+}