求整数最大的连续0的个数 A binary gap within a positive integer N is any maximal sequence of consecutive zeros that is surrounded by ones at both ends in the binary representation of N. For example, number 9 has binary representation 1001 and contains a binary g…
题目: 对任意输入的正整数N,编写C程序求N!的尾部连续0的个数,并指出计算复杂度.如:18!=6402373705728000,尾部连续0的个数是3. (不用考虑数值超出计算机整数界限的问题) 思路: 1.直接计算N!的值,然后统计尾部0的个数,时间复杂度O(n): 2.发散思维,想想尾部为0的数是怎么得到的? 很容易想到2*5即可得到0,则N!可以表示为k*(2^m)*(5^n),由于在N!中m>>n,因此N!=k'*(2*5)^n,即n为尾部为0的个数. 由此,我们只要考虑N!中包含多少…
1138 - Trailing Zeroes (III) problem=1138"> problem=1138&language=english&type=pdf">PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB You task is to find minimal natural number N, so that N! contains exactl…
本篇文章介绍计算二进制数字尾部连续0的数目的相关算法,例如:v=(1101000)2,该数尾部连续0的数目=3 方法1:线性时间算法 unsigned int v; // 需要计算的目标整数 int c; // c用来保存计算的结果 if (v) { v = (v ^ (v - )) >> ; ; v; c++) { v >>= ; } } else { c = CHAR_BIT * sizeof(v); } 原理比较简单,下面提供一段C测试代码,根据代码显示的结果不难理解算法:…
题目: 用十进制计算30!(30的阶乘),将结果转换成3进制进行表示的话,该进制下的结果末尾会有____个0. 思路: 这道题与上一篇博文N!尾部连续0的个数的思路是一样的. 计算N!下三进制结果末尾有多少个0,其实就是计算三进制中的3被连续进位多少次,只要将N!因式分解成3^m*other,m就是答案. 技巧性的解法就是:m=N/3+N/(3^2)+N/(3^3)....+N/(3^k) (k<=N/3) (三进制数:第一位满3进1,第二位满9进1,第三位满27进1...) 代码: #incl…
原题地址:http://codeforces.com/problemset/problem/527/C Examples input H V V V output input H V V H V output 题意是给定一个矩形,不停地纵向或横向切割,问每次切割后,最大的矩形面积是多少. 最大矩形面积=最长的长*最宽的宽这题,长宽都是10^5,所以,用0 1序列表示每个点是否被切割,然后,最长的长就是长的最长连续0的数量+1最长的宽就是宽的最长连续0的数量+1于是用线段树维护最长连续零 问题转换…
04:求整数的和与均值 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 读入n(1 <= n <= 10000)个整数,求它们的和与均值. 输入 输入第一行是一个整数n,表示有n个整数.第2~n+1行每行包含1个整数.每个整数的绝对值均不超过10000. 输出 输出一行,先输出和,再输出平均值(保留到小数点后5位),两个数间用单个空格分隔. 样例输入 4 344 222 343 222 样例输出 1131 282.75000 来源 习题(8-6) 定义…
L1-008. 求整数段和 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 杨起帆 给定两个整数A和B,输出从A到B的所有整数以及这些数的和. 输入格式: 输入在一行中给出2个整数A和B,其中-100<=A<=B<=100,其间以空格分隔. 输出格式: 首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐.最后在一行中输出全部数字的和. 输入样例: -3 8 输出样例: -3 -2 -1 0…
/** *A3-IO-03. 求整数均值(10) *C语言实现 *测试已通过 */ #include "stdio.h" int main() { int a,s,d,f; scanf("%i %i %i %i",&a,&s,&d,&f); printf("Sum = %i; Average = %.1f\n",(a+s+d+f),((a+s+d+f)/4.0)); ; }     错误已修正.…
求阶乘末尾0的个数 (1)给定一个整数N,那么N的阶乘N!末尾有多少个0?比如:N=10,N!=3628800,N!的末尾有2个0. (2)求N!的二进制表示中最低位为1的位置. 第一题 考虑哪些数相乘能得到10,N!= K * 10M其中K不能被10整除,则N!末尾有M个0. 对N!进行质因数分解: N!=2X*3Y*5Z…,因为10=2*5,所以M与2和5的个数即X.Z有关.每一对2和5都可以得到10,故M=min(X,Z).因为能被2整除的数出现的频率要比能被5整除的数出现的频率高,所以M…