题目:求出1 ~ 13的整数中1出现的次数,并算出100 ~ 1300的整数中1出现的次数?
为此他特别数了一下1 ~ 13中包含1的数字有1、10、11、12、13因此共出现6次,
但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,
可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)
解题思路:这道题如果是把从1到n所有的数字按取余数的方法去计算1的个数,那么时间复杂度太过于庞大,因为我们不知道输入的数字有多大,就得去寻找数字的规律!
int NumberOf1Between1AndN_Solution(int n){ int count = 0; long long pos = 1; for(;pos <= n;pos*=10){ // 将 n 分为两部分,big为大部分,small 小的部分 int big = n / pos; int small = n % pos; //当前位置为1的时候 if(big % 10 == 1){ count += small + 1; } count +=(big+8)/10*pos; } return count; }