范围内的数字计数

假设我们有一个介于0和9之间的整数d,我们还有两个正整数,分别作为上下限。我们必须找到d在低和高之间的所有整数(包括低和高边界)中以数字形式出现d的次数。

因此,如果输入像d = 1,低= 1,高= 13,那么输出将是6,因为数字d = 1出现了6次,如1,10,11,12,13。

为了解决这个问题,我们将遵循以下步骤-

定义一个函数zero(),将花费n,

  • ret:= 0,x:= 0

  • 如果n等于0,则-

    • 返回1

  • 对于初始化m:= 1,当m <= n时,更新m:= m * 10,做-

    • ret:= ret +(a / 10)

    • ret:= ret +(((a / 10)* m +(b +1)))

    • ret:= ret +(((a / 10)+1)

    • 从循环中出来

    • a:= n / m

    • b:= n mod m

    • z:= mod 10

    • 如果m中的位数与n中的位数相同,则-

    • 如果z> x,则-

    • 否则,当z与x相同时,则

    • 除此以外

    • 返回ret

    • 定义一个函数f(),它将取x,n,

    • ret:= 0

    • 对于初始化m:= 1,当m <= n时,更新m:= m * 10,做-

      • ret:= ret-m

      • ret:= ret +(a / 10)

      • ret:= ret +(((a / 10)* m +(b +1)))

      • ret:= ret +(((a / 10)+1)

      • a:= n / m

      • b:= n mod m

      • z:= mod 10

      • 如果z> x,则

      • 否则,当z与x相同时,则-

      • 除此以外

      • 如果x等于0,则-

      • 返回ret

      • 从主要方法执行以下操作

      • 返回ret

      • 返回f(d,高-f(d,低-1))

      让我们看下面的实现以更好地理解-

      示例

      #include <bits/stdc++.h>

      using namespace std;

      class Solution {

         public:

         int digitCount(int x){

            int ret = 0;

            while (x) {

               ret++;

               x /= 10;

            }

            return ret;

         }

         int zero(int n){

            int ret = 0;

            int x = 0;

            if (n == 0)

            return 1;

            for (int m = 1; m <= n; m *= 10) {

               int a = n / m;

               int b = n % m;

               int z = a % 10;

               if (digitCount(m) == digitCount(n))

               break;

               if (z > x) {

                  ret += ((a / 10) + 1) * m;

               } 

               else if (z == x) {

                  ret += (a / 10) * m + (b + 1);

               } else {

                  ret += (a / 10) * m;

               }

               cout << ret << endl;

            }

            return ret;

         }

         int f(int x, int n){

            int ret = 0;

            for (int m = 1; m <= n; m *= 10) {

               int a = n / m;

               int b = n % m;

               int z = a % 10;

               if (z > x) {

                  ret += ((a / 10) + 1) * m;

               }

               else if (z == x) {

                  ret += (a / 10) * m + (b + 1);

               } else {

                  ret += (a / 10) * m;

               }

               if (x == 0) {

                  ret -= m;

               }

            }

            return ret;

         }

         int digitsCount(int d, int low, int high){

            return f(d, high) - f(d, low - 1);

         }

      };

      main(){

         Solution ob;

         cout << (ob.digitsCount(1,1,13));

      }

      输入值

      1,1,13

      输出结果

      6

      以上是 范围内的数字计数 的全部内容, 来源链接: utcz.com/z/355639.html

      回到顶部