整数中1出现的次数(从1到n整数中1出现的次数)

整数中1出现的次数(从1到n整数中1出现的次数)

http://www.nowcoder.com/questionTerminal/bd7f978302044eee894445e244c7eee6

给定一个数n,从个位开始遍历到最高位。例如,312:
解题思路:
找出1在各个位上出现的次数之和。用dec来表示当前位上的数,d用来进位同时判断n是否到达最高位。
(1)个位上,d=10,n/d(d/10)+(若dec>1,则+d/10)/(若dec=1,则+((n-n/(d/10)(d/10))+1))=31+1=32
(2)十位上,d=100,n/d(d/10)+(若dec>1,则+d/10)/(若dec=1,则+((n-n/(d/10)(d/10))+1))=30+(2+1)=33
(3)百位上,d=1000,因为d>n,已经是该数的最高位了,n/d(d/10)+(若dec>1,则+d/10)/(若dec=1,则+(n-n/(d/10)(d/10)+1))=0+100=100
所以最终为165。

public int NumberOf1Between1AndN_Solution(int n) {
    int count = 0;
    for(int d=1;d<=n;){
        d *=10;
        int dec=n%d/(d/10);
        count +=n/d*(d/10);
        if(dec>1){
            count +=d/10;
        }else if(dec==1){
                count +=n-n/(d/10)*(d/10)+1;
        }
    }
    return count;
}

给自己提个醒。。(其他大佬的答案我都没看懂,我太菜了。。)

全部评论

相关推荐

头像
今天 12:47
已编辑
中国地质大学(武汉) Java
你出生在农村,与其它农村小孩子无异小学时你对成绩没有概念,只感觉上课不听课也是无聊,只知道不写完作业会被老师罚站一到考试,自己成绩总是名列靠前,即使偶尔落后,你也从不在意中学时你觉得课本的东西很简单,随便学学就会了,并没有大量刷题你总是想不通,那些所谓的数学物理中难题,明明是在送分,为什么你的同学总是想不出解题方法高中时这三年你过的不容易,晚睡早起,给了自己很多压力.但是你也发现自己是有些小聪明的,你感觉班里有些同学很刻苦,但成绩比你差远了。那些数学题和物理题的陷阱,同学一遍遍踩坑,但是你总能发现并避开它们.“为了父母的期盼,为了恩师的厚望,为了天赐的智慧,为了青春的理想......”“天行健...
创作助手_刘北:其实,这种已经是神童级别的了,不费吹灰之力就能拿到自己想要的东西,就像机器按照程序走了一遍,就像我小时候看爱情公寓,觉得他们都很惨,几个人只能挤在一个房间里合租,但是好在他们有一群非常好的朋友,随着时间的推移,慢慢长大了,在看爱情公寓的时候,觉得他们都很厉害,博士、留学生、***、电台公子,数学天才,任何一个都是我可望而不可即的,更别说可以在异地认识一群更好的朋友了,所以呢,人还是要自给自足,满足当下,不要攀比,意气风发的且有理想的18岁少年永远都存在,只不过随着时间的推移他被你包裹在了洋葱的最深处。
点赞 评论 收藏
分享
ResourceUtilization:算法很难了,现在都需要相关论文还有对应的实习,可以先试试中厂
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务