class Solution {
public:
long long dp[20];
long long miu[20];
int nums[20];
int countDigitOne(int n) {
int len = 0;
memset(dp,0,sizeof(dp));
memset(miu,0,sizeof(miu));
int x = n;
int num = 0;
while(x > 0) {
nums[num] = x % 10;
num++;
x = x / 10;
}
//
dp[0] = 0;
dp[1] = 1;
miu[0] = 0;
miu[1] = 1;
for(int i=2;i<11;i++) {
miu[i] = miu[i-1] * 10ll;
}
for(int i=1;i<=11;i++) {
dp[i] = dp[i-1] * 10ll + miu[i];
}
// for(int i=1;i<=10;i++) {
// cout << dp[i] << " " << miu[i] << "\n";
// }
int ans = 0;
//1234
//
int tmp = n;
for(int i=num-1;i>=0;i--){
//
cout << nums[i] << " " << dp[i] << " " << miu[i] << "\n";
ans += dp[i] * nums[i];
if(nums[i] > 1){
ans += (miu[i+1]);
tmp -= miu[i+1] * nums[i];
}
else if(nums[i] == 1){
tmp -= miu[i+1] * nums[i];
ans += tmp + 1;
}
}
return ans;
}
};