C ++中的数字位数

假设我们有一个数字n,我们必须计算出现在所有小于或等于n的所有非负数字中的数字1的总数。因此,如果输入为15,则输出将为8,因为包含1的数字为[1,10,11,12,13,14,15],所以有8个1。

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

  • ret:= 0

  • 用于初始化i:= 1,当i <= n时,i = i * 10做-

    • ret = ret +(a / 10 +1)* i

    • ret = ret +(a / 10)* i

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

    • a:= n / i,b:= n mod i,x:= a mod 10

    • 如果x与1相同,则

    • 否则,当x等于0时,则-

    • 除此以外

    • 返回ret

    示例

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

    #include <bits/stdc++.h>
    using namespace std;
    class Solution {
       public:
       int countDigitOne(int n) {
          int ret = 0;
          for(long long int i = 1; i <= n; i*= (long long int)10){
             int a = n / i;
             int b = n % i;
             int x = a % 10;
             if(x ==1){
                ret += (a / 10) * i + (b + 1);
             }
             else if(x == 0){
                ret += (a / 10) * i;
             } else {
                ret += (a / 10 + 1) *i;
             }
          }
          return ret;
       }
    };
    main(){
       Solution ob;
       cout << (ob.countDigitOne(15));
    }

    输入项

    15

    输出结果

    8