C++ 中的数字 1 个数


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

要解决这个问题,我们将按以下步骤操作:-

  • ret := 0

  • 当 i = 1 初始化时,i <= n,i = i * 10 执行以下操作:-

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

    • 如果 x 与 1 相同,则

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

    • 否则,当 x 与 0 相同时,执行以下操作:-

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

    • 否则

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

  • 返回 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

更新于: 27-May-2020

348 次观看

职业生涯

完成课程后获得认证

开始
广告