C ++中的数字位数
为了解决这个问题,我们将遵循以下步骤-
ret:=0
用于初始化i:=1,当i<=n时,i=i*10做-
ret=ret+(a/10+1)*i
ret=ret+(a/10)*i
ret=ret+(a/10)*i+(b+1)
a:=n/i,b:=nmodi,x:=amod10
如果x与1相同,则
否则,当x等于0时,则-
除此以外
返回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