Codeforces Round #308 (Div. 2) B. Vanya and Books
原题:http://codeforces.com/contest/552/problem/B
题目大意: 给个数字n, 求这n个数字的digits个数的合
分析: 比如1234, digit是1的区间是[1,9], 一共9个, 2的区间是[10,99]一共90*1个digit, 3的区间是[100,999]一共900*2个digit, n的区间是[10^n,10^(n+1)-1]一共10^(n+1) – 10^(n)*(n-1)个digit. 那么1234 落在区间4, [1000,9999]中. 可以用1234-1000+1得到4个digit的数字的个数, 然后乘以4,得到digit为4的digit数, 然后与前边的区间的合相加, 就是答案
第一次写:
public void solve(int testNumber, InputReader in, OutputWriter out) { long n = in.readLong(); long t = n; long res = 0; int digits = 1; while (n / 10 != 0) { res += (9 * Math.pow(10, digits - 1)) * digits; digits++; n /= 10; } res += (t - Math.pow(10, digits - 1) + 1) * digits; out.print(res); }
第二次写:
public void solve(int testNumber, InputReader in, OutputWriter out) { long n = in.readLong(); long res = 0; int digits = 1; while (true) { double up = Math.pow(10,digits)-1; if (n > up) res += (9*Math.pow(10,digits-1)) * digits; else { res += (n - (Math.pow(10,digits-1))+1) * digits; break; } digits++; } out.print(res); }
Leave A Comment