华为做题
描述
求一个int类型数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1
本题含有多组样例输入。 数据范围:数据组数:1\le t\le 5\1≤t≤5 ,1\le n\le 500000\1≤n≤500000 进阶:时间复杂度:O(logn)\O(logn) ,空间复杂度:O(1)\O(1)输入描述:
输入一个int类型数字
输出描述:
输出转成二进制之后连续1的个数
#include#include <string.h> int main() { int input; while (scanf("%d", &input) != EOF) { int tmpResult = 0; int result = 0; while (input) { if (input&1 == 1) { // 为1 tmpResult++; } else { tmpResult = 0; } if (tmpResult > result ) { result = tmpResult; } input = input>>1; } printf("%d\n", result); } return 0; }
2、
将一个字符串str的内容颠倒过来,并输出。 数据范围:1 \le len(str) \le 10000\1≤len(str)≤10000#include#include <string.h> int main() { char input[10000] = {0}; gets(input); int len = strlen(input); // printf("len = %d\n", len); for (int i = len -1; i >= 0; i--) { printf("%c", input[i]); } printf("\n"); return 0; }
# 注意,用scanf获取不到空格,要用gets