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
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP