您的位置:首页 > 大数据 > 人工智能

2017 Multi-University Training Contest - Team 1:Add More Zero (hdu 6033)

2017-07-27 09:28 585 查看


Add More Zero

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)

Total Submission(s): 868    Accepted Submission(s): 600

Problem Description

There is a youngster known for amateur propositions concerning several mathematical hard problems.

Nowadays, he is preparing a thought-provoking problem on a specific type of supercomputer which has ability to support calculations of integers between 0 and (2m−1) (inclusive).

As a young man born with ten fingers, he loves the powers of 10 so
much, which results in his eccentricity that he always ranges integers he would like to use from 1to 10k (inclusive).

For the sake of processing, all integers he would use possibly in this interesting problem ought to be as computable as this supercomputer could.

Given the positive integer m,
your task is to determine maximum possible integer k that
is suitable for the specific supercomputer.

 

Input

The input contains multiple test cases. Each test case in one line contains only one positive integer m,
satisfying 1≤m≤105.

 

Output

For each test case, output "Case #x: y"
in one line (without quotes), where x indicates
the case number starting from 1 and y denotes
the answer of corresponding case.

 

Sample Input

1
64

 

Sample Output

Case #1: 0
Case #2: 19

 

Source

2017 Multi-University Training Contest - Team 1

 //题意:问2的m次是10的几次数量级。

//思路:10的k次<2的m次<10的k+1次 => lg(2的m次)- 1 < k <  lg(2的m次)

因为m最大有100000,所以2的m次直接是算不出来的,所以要用个小技巧,lg里面乘是可以化成2个lg相加的,(比如:lg8=lg2+lg4),所以我们可以把2的m次拆一下,每次算2的100次(我电脑测试过2的100次是可以直接算的),然后加起来就可以了,但注意每次去加的那个k要是double的,不然会精度缺失!

#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;

long long m;
double k;

int main()
{
int Case = 1;
while (scanf("%lld", &m) != EOF)
{
printf("Case #%d: ", Case++);
k = 0;
while (m > 0)
{
if (m > 100)
k += log10(pow(2, 100));
else
k += log10(pow(2, m));
m = m - 100;
}
long long ans = (long long)k;
printf("%lld\n", ans);
}
return 0;
}


2m

2m
2m
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐