• CF92B-Binary Number-(思维)


    https://vjudge.net/problem/CodeForces-92B

    题意:给一个长度为106的二进制数,有两种操作,第一种是除以2,第二种是末尾+1,以二进制运算,问这个二进制数最少几次操作后变成1。

    思路:如果末尾是0,则是偶数,可以除以2,消去一个0;如果末尾是1,则是奇数,需要加1变成偶数,这样在末尾会产生一个0,并且左边会进位生出一个1。如果有一段连续的1,则会在连续1的左边生出一个1,连续的1串会变成0,逐个消掉就好了。

    mport java.util.Arrays;
    import java.util.HashMap;
    import java.util.LinkedList;
    import java.util.Scanner;
    
    public class Main{
        
        public static void main(String []args) {
            Scanner scan=new Scanner(System.in);
            String s;
            char [] a=new char[1000086];
            
            while(scan.hasNext()) {
                s=scan.next();
                s="0"+s;
                a=s.toCharArray();
                int len=s.length();
                int ans=0;
                for(int i=len-1;i>1;) {
                    if(a[i]=='0') {
                        ans++;
                        i--;
                    }else {
                        ans++;//+1操作
                        int num=0;//计数有多少个连续的1
                        while(a[i]=='1') {
                            num++;
                            i--;
                        }
                        ans=ans+num;//进位后都变成0,每个0需要一次除2操作
                        a[i]='1';//连续1前面的那一位被进位成1
                    }
                }
                System.out.println(ans);
            }
        }
    
    }
  • 相关阅读:
    spring boot 启动类 添加组件
    spirng boot 添加过滤器
    spring cloud spring-hystrix 缓存
    spring cloud spring-hystrix
    spring cloud spirng整合feign
    spring cloud feign
    cxf-client
    spring cloud客户端启用负载均衡
    spring cloud 负载均衡自定义
    VS2013 配置pthread
  • 原文地址:https://www.cnblogs.com/shoulinniao/p/12075285.html
Copyright © 2020-2023  润新知