>Description
一天,小R准备找小h去游泳,当他找到小h时,发现小h正在痛苦地写着一列数,1,2,3,…n,于是就问小h痛苦的原因,小h告诉他,现在他要算1…n这些数里面,1出现的次数是多少,如n=11的时候,有1,10,11共出现4次1,现在给出n,你能快速给出答案么?
>Input
一行,一个整数n
>Output
一个整数,表示1…n中1出现的次数。
对于30%的数据:n<=1000;
对于100%的数据:n<=maxlongint;
>解题思路
一道数学题(果然我不会$$)
找规律:
假设n=12345,我们从右往左一位一位看,我们会发现:
对于个位数,每10个数就会出现1个1;
对于十位数,每100个数就会出现10个1;
对于百位数,每1000个数就会出现100个1;
……
那对于当前位上多出来的数怎么办?
如果当前数=0,答案保持
如果当前数=1,我们要加上后面的数+1,例如枚举到第五个数1,我们要加上2345+1(0000的情况)
如果当前数>1,我们要加上位数,例如枚举到第三个数3,我们要加上100~