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
广告