求一个区间[a,b]中数字1出现的次数

问题来源:http://ac.jobdu.com/problem.php?pid=1373

举例:如果n=10

那么1-10之间的1的个数是2(1,2,3,4,...10)

这其中有一个规律:

挨着看n的每一位。

如果当前位小于1,那么个数等于高位*当前位率。

如果当前位等于1,那么个数等于高位*当前位率 + 低位 + 1。

如果当前位大于1,那么个数等于(高位+1)*当前位率。

时间: 2024-10-12 18:18:09

求一个区间[a,b]中数字1出现的次数的相关文章

(数位DP 1.1)hdu 2089 不要62(求一个区间[a,b]中不包含4,64的数的个数)

题目: 不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 23759    Accepted Submission(s): 8128 Problem Description 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer).杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来

(算法)从0到n整数中数字2出现的次数

题目: 数出0到n(含)中数字2出现了几次. 思路: 1.暴力方法,数出每个数字包含几个2,然后累加起来. 2.分析:分别考虑数字n每一位出现2的次数,如123123: 从左往右考虑4123123: 考虑第一个1(即第6位),该位出现2的次数为4*10^6/10: 考虑第一个2(即第5位),该位出现2的次数为41*10^5/10+3123+1: 考虑第一个3(即第4位),该位出现2的次数为(412+1)*10^4/10: 附:除以10的原因在于:每10个数字,任意位出现2的概率为1/10. 总结

(hdu 简单题 128道)平方和与立方和(求一个区间的立方和和平方和)

题目: 平方和与立方和 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 108212    Accepted Submission(s): 34915 Problem Description 给定一段连续的整数,求出他们中所有偶数的平方和以及所有奇数的立方和. Input 输入数据包含多组测试实例,每组测试实例包含一行,由两个整数m和n组

求排序数组中数字k出现的次数

思路:如果从头到尾遍历数组,那时间复杂度是O(n).我们可以利用题目给出的条件,由于是排序数组,我们可以利用二分查找来实现 时间复杂度为O(log2N) 具体代码如下: #include<iostream> #include<cassert> using namespace std; int findfirstk(int *ar, int len, int k, int start, int end)//利用二分查找找到第一个k出现的位置 { if(start > end)

一个关于取字符串中数字和字符的逻辑问题

代码如下 string a = "长花asdsad1236李代5415老花1213"; int j = 0; int k = 0; bool id = true; for (int i = 0; i < a.Length;i++ ) { if (a[i] >= '0' && a[i] <= '9') { if (id) { k = i; id = false; } if (i < a.Length - 1) { if (a[i + 1] >

233. Number of Digit One *HARD* -- 从1到n的整数中数字1出现的次数

Given an integer n, count the total number of digit 1 appearing in all non-negative integers less than or equal to n. For example:Given n = 13,Return 6, because digit 1 occurred in the following numbers: 1, 10, 11, 12, 13. Hint: Beware of overflow. c

18.n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。 当一个数字删除后,从被删除数字的下一个继续删除第m个数字。 求出在这个圆圈中剩下的最后一个数字。

转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4263868.html 声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己也方便有类似问题的朋友,本文的思想也许有所借鉴,但源码均为本人实现,如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明.谢谢. 题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字). 当一个数字

求一个数组中只出现一次的数字

/* 求一个数组中只出现一次的数字(注:只针对数组中有两个数不同,且其他数字两两相同) 题目:一个整型数组里除了两个数字出现一次外,其他的数字都出现了两次:求出现一次的数字: 如:数组a[]={2,4,3,6,3,2,5,5};执行程序后应输出4和6:因为4,6只在该数组中出现了一次 思路:两个数字相同其异或结果一定为0,先异或->再分组-->再对每个子序列异或 算法: 1. 先对数组的每一个元素进行异或操作,求结果(本质就是对那两个不同的数的异或,即4^6=0010) 2.根据异或的操作结果

求一个整型数字中有没有相同的部分,例如12386123这个整型数字中相同的部分是123,相同的部分至少应该是2位数,如果有相同部分返回1,如果没有则返回0。方法是先将整型数字转换到数组中,再判断。函数为 int same(int num)其中num是输入的整型数字

import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Test { public static void main(String[] args) { /** * 2.求一个整型数字中有没有相同的部分,例如12386123这个整型数字中相同的部分是123, * 相同的部分至少应该是2位数,如果有相同部分返回1,如果没有则返回0. * 方法是先将整型数字转换到数组中,再判断.