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 次觀看

職業生涯

完成課程後獲得認證

開始
廣告
© . All rights reserved.