面试OR笔试16——1的个数

来源:互联网 发布:还原数据库找不到文件 编辑:程序博客网 时间:2024/06/05 22:42

题目及要求

1.1 题目描述

求从1到正整数n这n整数的十进制表示中1出现的次数。例如输入12, 从1到12包含1的数字有1,10,11,12共出现了5次。

 

2 解答

2.1 代码

int numberOf1(int n){if(n<1) return 0;int basen(1),base(10),num(0);while(!(n<base)){ // 求位数和对应的基数值base*=10;++basen;}base /= 10;// 先求n/base+1到n的1的个数num = 1<n/base ? base:1+n%base;// 最高位1的个数num += n/base * (basen-1)*base/10;// 其他位1的个数// 再求1到n/base的1的个数return num + numberOf1(n%base);}



原创粉丝点击