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