zoukankan      html  css  js  c++  java
  • [Jobdu] 题目1373:整数中1出现的次数(从1到n整数中1出现的次数)

    题目描述:

    亲们!!我们的外国友人YZ这几天总是睡不好,初中奥数里有一个题目一直困扰着他,特此他向JOBDU发来求助信,希望亲们能帮帮他。问题是:求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。

    输入:

    输入有多组数据,每组测试数据为一行。

    每一行有两个整数a,b(0<=a,b<=1,000,000,000)。

    输出:

    对应每个测试案例,输出a和b之间1出现的次数。 

    样例输入:
    0 5
    1 13
    21 55
    31 99
    
    样例输出:
    1
    6
    4
    7
    
    答疑:
    解题遇到问题?分享解题心得?讨论本题请访问:http://t.jobdu.com/thread-8096-1-1.html
     1 #include <iostream>
     2 #include <algorithm>
     3 using namespace std;
     4  
     5 int a, b;
     6  
     7 int getOne(int n) {
     8     int cnt = 0;
     9     int m = n;
    10     int base = 1;
    11     while (m > 0) {
    12         cnt += m/10 * base;
    13         if (m%10 > 1) {
    14             cnt += base;
    15         } else if (m%10 == 1) {
    16             cnt += n%base + 1;
    17         }
    18         m /= 10;
    19         base *= 10;
    20     }
    21     return cnt;
    22 }
    23  
    24 int main() {
    25     while (cin >> a >> b) {
    26         if (a > b) swap(a, b);
    27         cout << getOne(b) - getOne(a-1) <<endl;
    28     }
    29     return 0;
    30 }
    31  
    32 /**************************************************************
    33     Problem: 1373
    34     User: hupo250
    35     Language: C++
    36     Result: Accepted
    37     Time:40 ms
    38     Memory:1520 kb
    39 ****************************************************************/
  • 相关阅读:
    jchdl
    jchdl
    UVa 10256 (判断两个凸包相离) The Great Divide
    UVa 11168 (凸包+点到直线距离) Airport
    LA 2572 (求可见圆盘的数量) Kanazawa
    UVa 10652 (简单凸包) Board Wrapping
    UVa 12304 (6个二维几何问题合集) 2D Geometry 110 in 1!
    UVa 10674 (求两圆公切线) Tangents
    UVa 11796 Dog Distance
    LA 3263 (平面图的欧拉定理) That Nice Euler Circuit
  • 原文地址:https://www.cnblogs.com/easonliu/p/4328687.html
Copyright © 2011-2022 走看看