牛客网题目链接
这道题和统计1的个数很像,但是有区别,在另一个题中11是算作两个1,而这里只算1个1。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <vector>
#include <cstring>
#include <string>
using namespace std;
typedef long long LL;
int main(){
string str;
while(cin>>str){
int res = 0;
int pre = 0;
for(int i = str.size() - 1; i >= 0; i--){
int r = 0, p = 1;
for(int j = i+1; j < str.size(); j++) {
r = r*10 + str[j] - '0';
p *= 10;
}
if(str[i] == '1') res = r + 1 + pre ; //1234 以1开头的有r+1个 以0开头的就是234的结果
else if(str[i] > '1') res += (str[i]-'1')*pre + p; //389 以0,2,3开头的乘以89的结果
//加上1开头的100~199
pre = pre*9 + p; //每个进制下都是由0,2,3,4,5,6,7,8,9九个数加上 1开头的所有p个
}
cout<<res<<endl;
}
return 0;
}