How many zero's and how many digits ?
2015-08-06 14:41
330 查看
How many zero's and how many digits ?
大意:
给出一个数字N和进制B,求N!在B进制下,有多少个尾0,有多少位数字;
代码:
#include <stdio.h>
#include <string.h>
#include <cmath>
int flag[1000];
int main(){
int n, b;
while (scanf ("%d %d", &n, &b) != EOF){
double leng = 0;
for (int i = 2; i <= n; i++) {
leng += log10(i);
}
leng = leng / log10(b);
int y = (int)(leng + 0.000001) + 1;
for (int i = 2; i <= n; i++) {
int factor = i;
for (int j = 2; j <= factor && j <= b; j++){
while (factor % j == 0){
flag[j]++;
factor = factor / j;
}
}
}
int zm = 0;
while (1){
int t = b;
for (int j = 2; j <= t; j++){
while (t % j == 0 && flag[j]){
flag[j]--;
t = t / j;
}
}
if (t == 1) {
zm++;
}
else {
break;
}
}
printf ("%d %d\n", zm, y);
memset(flag, 0, sizeof (flag));
}
}
大意:
给出一个数字N和进制B,求N!在B进制下,有多少个尾0,有多少位数字;
代码:
#include <stdio.h>
#include <string.h>
#include <cmath>
int flag[1000];
int main(){
int n, b;
while (scanf ("%d %d", &n, &b) != EOF){
double leng = 0;
for (int i = 2; i <= n; i++) {
leng += log10(i);
}
leng = leng / log10(b);
int y = (int)(leng + 0.000001) + 1;
for (int i = 2; i <= n; i++) {
int factor = i;
for (int j = 2; j <= factor && j <= b; j++){
while (factor % j == 0){
flag[j]++;
factor = factor / j;
}
}
}
int zm = 0;
while (1){
int t = b;
for (int j = 2; j <= t; j++){
while (t % j == 0 && flag[j]){
flag[j]--;
t = t / j;
}
}
if (t == 1) {
zm++;
}
else {
break;
}
}
printf ("%d %d\n", zm, y);
memset(flag, 0, sizeof (flag));
}
}
相关文章推荐
- Swift 初学手册:可选类型 (Optionals)
- PHP+jQuery+Ajax+Mysql如何实现发表心情功能
- win8使用iso镜像升级到Win10正式版的方法步骤详解
- iOS开发系列--Objective-C之类和对象
- Docker build WordPress
- 随机红包生成算法-python实现
- maven的安装和配置(手动和eclipse插件)
- openstack cpu、内存超分设置
- Access denied for user 'root'@'192.168.12.249' to database 'zc_beauty'
- twisted03 使用twisted.web.client进行下载
- Android 用MediaCodec实现视频硬解码
- ffmpeg streaming guid
- android ui组件
- 腾讯小记-第二周
- 关于greendao里面文件的解读。
- Windows平台下最新版VLC编译
- 获取到Applegate的方法
- 网传各大公司的待遇(2013年)
- 移动金融APP分析
- Linux-iptables 防火墙设置