[提高班] 2017 Summer Training Day1补题

题目地址:https://vjudge.net/contest/175939#overview

A、数据范围是10^9,所以需要一个巧思路。对于一个数n,如何去判定比它的所有数是否是二进制形式。比n小的十进制数极其庞大,但是假设n就是二进制形式,比它小的二进制数有几个?正好,有n(二进制)个。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 int main(){
 5     string s;
 6     cin>>s;
 7     for(int i=0;s[i];i++){
 8         if(s[i]!='0'&&s[i]!='1'){
 9             for(int j=i;s[j];j++){
10                 s[j]='1';
11             }
12         }
13     }
14     ll ans=0;
15     for(int i=0;i<s.size();i++){
16         ans+=(s[i]-'0')*(1<<(s.size()-i-1));
17     }
18     printf("%lld\n",ans);
19 }
View Code

 

posted @ 2017-10-20 11:42  Elpsywk  阅读(141)  评论(0编辑  收藏  举报