10061 - How many zero's and how many digits ?
来源:互联网 发布:尚硅谷 java视频 编辑:程序博客网 时间:2024/06/11 12:29
题目:10061 - How many zero's and how many digits ?
题目大意:求N!在bas进制下的位数和后面的0;
解题思路:分两步,一步是求位数,在十进制的情况下:下取整log10(n) + 1,就是求数n的位数;例如log10(10)是1,但是十是两位数,所以加1。因为log10(a*b)= log10(a)+log10(b);所以求N!的位数可以是sum(log10(i))(1<= i<= n );下取整的话可以用floor(sum),也可以用int(sum)(在sum>=0 的情况下)。
第二步:求后面的零,思路是现将N!分解成不大于bas的质因数,因为 大于bas的质因数肯定不能组成bas,而只有组成bas,才会有0产生。例如在十进制下,2 * 5 = 10,这样就会产生一个0 在末尾。所以要给一个数组来存放质因数。然后要将质因数组合成bas。组成一个bas就产生一个零。
#include<stdio.h>#include<string.h>#include<math.h>int n, d;const int N = 10000;int s[N]; int zero_num() {int i, j;for(i = 2; i <= n; i++) {int k = i;for(j = 2; j <= k && j <= d ; j++)while(k % j == 0) {s[j]++;k /= j;}}int count = 0, bas = d;for(i = 2; i <= d; i++) {if(s[i]) {if(bas % i == 0) {s[i]--;bas /= i; i--;} if(bas == 1 ) {count++;bas = d;i = 1;}}}return count;}int dight_num() {double sum = 0;for(int i = 1; i <= n; i++)sum += log(i) / log(d);return (int)(sum) + 1;}int main() {while(scanf("%d %d", &n, &d) != EOF) {memset(s, 0, sizeof(s));printf("%d %d\n", zero_num(), dight_num());}return 0;}
0 0
- uva 10061 - How many zero's and how many digits ?
- uva 10061 - How many zero's and how many digits ?
- 10061 - How many zero's and how many digits ?
- UVa 10061 - How many zero's and how many digits ?
- UVA 10061 How many zero's and how many digits ?
- uva 10061 - How many zero's and how many digits ?
- 10061 - How many zero's and how many digits ?
- UVa 10061: How many zero's and how many digits?
- uva 10061 - How many zero's and how many digits
- uva 10061 How many zero's and how many digits ?
- 10061 - How many zero's and how many digits ?
- 10061 - How many zero's and how many digits ?
- uva 10061: How many zero's and how many digits?
- UVa 10061 - How many zero's and how many digits ?
- UVa 10061 - How many zero's and how many digits ?
- UVA 10061 How many zero's and how many digits ?
- UVA - 10061 How many zero's and how many digits ?
- 10061 - How many zero's and how many digits ?
- php导出word格式数据
- 13年末留下点东东
- Object-c入门笔记
- 键盘记录及自动发送VC++实现
- c#线程间传递参数详解
- 10061 - How many zero's and how many digits ?
- gettimeofday/settimeofday
- Construct Binary Tree from Inorder and Postorder Traversal
- Spring 3.1之无web.xml式 基于代码配置的servlet3.0应用
- Java是解释型语言还是编译型语言
- C#值类型和引用类型
- OpenGL学习三十四:剪裁区域和TGA图像文件的加载
- 黑马程序员---Runtime类
- Linux驱动开发学习的一些必要步骤