#include "point.h"
using namespace std;
int CalcOneHelp(int);
int CalcOne(int);
int power(int ,int);
int CalcOne(int N)//穷举法,比较傻瓜,思路简单,运算速度慢
{
int sum=0;
for(int i=1;i<=N;i++)
sum+=CalcOneHelp(i);
return sum;
}
int CalcTwo(int N)//新算法,需要进行一些数学分析,运算速度快
{
int e=0;//这事10的指数
int sum=0;
int numlater=0;//当前数字后面的数字,如12345;如果当前数字为2(千位),那么numlater为345
while(N>0)
{
int obj=N%10;//当前该位的数字
int numpre=N/10;//当前这个数字前面的数字,如712345;如果当前数字为2(千位),那么numpre为71
if(0==obj)
sum+=numpre*power(10,e);
else if(1<obj)
sum+=(numpre+1)*power(10,e);
else//为1
sum+=(numpre*power(10,e))+numlater;
//计算完毕,还要做3件事情
numlater+=obj*power(10,e);
e++;
N=numpre;
}
return sum;
}
void main()
{
int N;
while(true){
cin>>N;
int rst1=CalcOne(N);//alg 1
int rst2=CalcTwo(N);//alg 2
cout<<rst1<<endl;
cout<<rst1<<endl;
}
}
int CalcOneHelp(int T)
{
int mysum=0;
while(T>0)
{
int rem=T%10;
if(rem==1)
mysum++;
T=T/10;
}
return mysum;
}
int power(int b,int e)
{
int rst=1;
for(int i=0;i<e;i++)
rst*=b;
return rst;
}