2017年多校赛第一场 1001 Add More Zero(逻辑思维)

来源:互联网 发布:淘宝主页装修教程 编辑:程序博客网 时间:2024/06/07 04:54

很明显,要找出10的k次方小于(2的m次方 - 1)且k尽量大,就是对log10(2^m-1)向下取整。并且2的次幂是不存在刚好等于10^k的情况的,比如1000-1会退回999少了一位,但实际上这种情况对于2的次幂不会存在。所以就变成了求log10(2^m),也就是m*log10(2)。

我写这题的时候并不会写,我是直接想找规律,以为他进制都是看最高位,最高位恰好又是1 2 4 8 1 3 6 1 2 5一直循环。但是后面的数字也是要考虑的,比如4096到8192,后面的数字也在不断增大,可能存在某一位就会进位使得前面的循环被打破。我算到的就是,2^102次方第一位变为5了,所以后一位变成10了,进了一位,所以在103位这样算答案就是错误的了。

代码如下:

#include<bits/stdc++.h>using namespace std;int main() {int Case = 1;int n, ans;while(cin >> n) {ans = n * log10(2);printf("Case #%d: %d\n", Case++, ans);}return 0;}