北京网站建设方案排名,网站怎么增加关键词库,石家庄做网站好的网络技术有限公司,网页设计模板html代码教程题目描述 给你一个非负整数n(0≤n≤232-1),求其二进制里面最长连续1数码的长度。 比如,7的二进制为111#xff0c;所以最长连续1数码的长度为3#xff1b;13的二进制为1101#xff0c;所以最长连续1数码的长度为2. 输入 第一行是一个整数K(K≤20000)#xff0c;表示样例的个… 题目描述 给你一个非负整数n(0≤n≤232-1),求其二进制里面最长连续1数码的长度。 比如,7的二进制为111所以最长连续1数码的长度为313的二进制为1101所以最长连续1数码的长度为2. 输入 第一行是一个整数K(K≤20000)表示样例的个数 以后每行一个整数n。 输出 每行输出一个样例的结果。 样例输入 2
7
13 样例输出 3
2解题思路题目很明显就是一个 二进制转换 求出现最多次数 的问题。 这些问题都碰见很多次了相信大家都有了一定的解题方法。所以这些都不是大问题。
这里最需要注意的是n的取值范围这里也有考验你对 int 的取值范围的熟悉程度要知道 int 是4字节字符一字节有八比特所以有 32个比特一个比特就是一个 0/1 所以 一个int 由 长为32的 0/1串 表示但最前面一位是符号位。所以int的最大值是多少 2^31-1 !所以 这题但用 int 是表示不了 n 的一定要用 __int64.
AC代码
#include stdio.hint main()
{int K,t;__int64 n;int cnt,maxlen;scanf(%d,K);while ( K --){cnt maxlen 0;scanf(%I64d,n);while (n){t n%2;if (t 1) cnt ;else{if (cnt maxlen) maxlen cnt;cnt 0;}n / 2;}if (cnt maxlen) maxlen cnt;printf(%d\n,maxlen);}return 0;
}