华为做题


描述

求一个int类型数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1

本题含有多组样例输入。 数据范围:数据组数:1\le t\le 5\1t5 ,1\le n\le 500000\1n500000  进阶:时间复杂度: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\1len(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

相关