C++:
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <string>
#include <algorithm>
#include <math.h>
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
int a = 0; //商
int b = 0; //余数
int count = 0;//连续1的个数
int Maximum = 0;//连续1的个数的最大值
while (n != 0) {
a = n / 2;
b = n % 2;
if (b == 1) {
count++;
if (count > Maximum) {
Maximum = count;
}
}
else {
count = 0;
}
n = a;
}
cout << Maximum<<endl;
system("pause");
return 0;
}
Python:
#!/bin/python3
import math
import os
import random
import re
import sys
if __name__ == '__main__':
n = int(input())
quot = 0 # quotient 商
rem = 0 # remainder 余数
count = 0 # Number of consecutive 1 连续1的个数
Maximum = 0 # Maximum number of consecutive 's 连续1的个数的最大值
while n != 0:
quot = int(n / 2) # 这里要用int类型,否则默认的是float类型,出现错误
rem = int(n % 2) # 这里要用int类型,否则默认的是float类型,出现错误
if rem == 1:
count += 1
if count > Maximum:
Maximum = count
else:
count = 0
n = quot
print(Maximum)
总结:
算法思路:
- 尽量循环一遍得到结果
- 通过标记判断连续1的个数
- 一直寻找最大值
- 遇到相同个数的1,不必更新最大值!!!
参考:https://blog.csdn.net/u010352111/article/details/53908250
C++:
转为二进制数,辗转相除法
while (n != 0) {
a = n / 2; // 商
b = n % 2; // 余数
n = a; // 让商作为新的除数
}
Python:
计算整除和求余数
quot = int(n / 2) # 这里要用int类型,否则默认的是float类型,出现错误
rem = int(n % 2) # 这里要用int类型,否则默认的是float类型,出现错误