2014-04-29 01:05

题目:数数从0到n总共有多少个数字‘2’?

解法:数位动态规划,可以O(log10(n))时间内解决。

代码:

 1 // 18.4 Count the number of 2s from 0 to n.
 2 #include <iostream>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     int d, i;
 8     long long int base;
 9     long long int sum;
10     long long int s[11];
11     long long int n;
12     
13     s[0] = 0;
14     base = 1;
15     for (i = 1; i < 10; ++i) {
16         s[i] = 10 * s[i - 1] + base;
17         base *= 10;
18     }
19     
20     while (cin >> n && n > 0) {
21         base = 1;
22         i = 0;
23         while (base * 10 <= n) {
24             base *= 10;
25             ++i;
26         }
27         
28         sum = 0;
29         while (n > 0) {
30             d = n / base;
31             sum += d * s[i];
32             if (d > 2) {
33                 sum += base;
34             } else if (d == 2) {
35                 sum += n % base + 1;
36             }
37             n %= base;
38             
39             base /= 10;
40             --i;
41         }
42         
43         cout << sum << endl;
44     }
45     
46     return 0;
47 }

 

相关文章:

  • 2021-12-17
  • 2021-06-16
  • 2021-08-22
  • 2021-12-27
  • 2021-11-29
  • 2021-11-12
  • 2021-12-30
  • 2022-03-10
猜你喜欢
  • 2021-06-19
  • 2021-10-19
  • 2021-09-10
  • 2021-09-21
  • 2021-10-23
  • 2021-10-10
  • 2021-09-27
相关资源
相似解决方案