#include<iostream>
#include <math.h>
struct SpliteNum{
int high;
int cut;
int low;
};
using namespace std;
int f(long num){
int counter = 0;
for(int i=1;i<=num;i++){
int temp = i;
while(temp){
counter += temp%10==1?1:0;
temp/=10;
}
}
return counter;
}
//counter from 0
SpliteNum spliteNumber(long num,int place){
int mode = pow((double)10,place);
SpliteNum nu;
nu.low = num % mode;
num /= mode;
nu.cut = num%10;
nu.high = num/10;
return nu;
}
int fAnalsys(long num){
int counter = 0;
SpliteNum sp = spliteNumber(num,0);
int placeCounter = 0;
while(sp.cut != 0){
int cut = sp.cut;
int high = sp.high;
int low = sp.low;
if(cut <1){
counter += high*pow((double)10,placeCounter);
}else if(cut>1){
counter += (high+1) * pow((double)10,placeCounter);
}else{
counter = counter + low+1 + high*pow((double)10,placeCounter);
}
placeCounter++;
sp = spliteNumber(num,placeCounter);
}
//cout<<"a="<<": "<< num<< "value: "<<f(a)<<endl;
return counter;
}
void main(){
long a = 123;
cout<<"a="<<": "<< a<< " value: "<<fAnalsys(a)<<endl;
}