附加题Ⅰ
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

太湖学院的大黄给你一个整数num(十进制),你需要重复多次下述操作把它转换为0
1. 把num对应的二进制表示中第0位翻转(最右侧位)
2. 若在二进制表示中第( i - 1 )位为1且从第( i - 2 )位到第0位都是0,那么就翻转num的二进制表示中的第 i 位
大黄想知道将整数num转换为0的最小操作次数,请你设计程序帮助其解决问题。

输入描述:

标准输入一个数num

输出描述:

输出该整数num按规则转换为0的最小操作次数
示例1

输入

复制
3

输出

复制
2

说明

3 的二进制表示为 “11”
“11” -> “01” ,执行的是第 2 种操作,因为第 0 位为 1
“01” -> “00” ,执行的是第 1 种操作
示例2

输入

复制
6

输出

复制
4

说明

6 的二进制表示为 “110”
“110” -> “010” ,执行的是第 2 种操作,因为第 1 位为 1 ,第 0 到 0 位为 0
“010” -> “011” ,执行的是第 1 种操作
“011” -> “001” ,执行的是第 2 种操作,因为第 0 位为 1
“001” -> “000” ,执行的是第 1 种操作

备注: