科大讯飞笔试题8.15(java)

本文主要解析了科大讯飞笔试中涉及的四道编程题目,包括求解无符号32位整数的二进制中1的个数、字符串左移、排序算法分析以及在数字矩阵中寻找不同行不同列的最大乘积。通过法一至法四详细阐述了解题思路和Java实现方法。
摘要由CSDN通过智能技术生成

1.给定一个无符号32位整数N,求N的二进制表示法中含1的个数

此题是整数,不考虑负数情况,以下四种方法均可,由于是无符号32位,所以int不符合,要使用long类型

法一:取余,但对于负数不适用

输入:-1
输出:0
输入:8
输出:1
import java.util.Scanner;

public class Member {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        long n = sc.nextLong();
        int count=0;
        while (n!=0){
            int temp=n%2;
            if(temp==1){
                count++;
            }
            n=n/2;
        }
        System.out.println(count);

    }
}

法二:二进制移位,不能让数据改变,只能拿0x01从右边每一位向左去试

输入:-1
输出:32
输入:8
输出:1
import java.util.Scanner;

public class Member2 {
    public static int a = 0x01f;
    public static void main(String []args){

        Scanner sc=new Scanner(System.in);
        int n = sc.nextInt();
        int ans = 0;
        long mark = 1;
        while (mark != 0) {
            if ((mark & n)!=0) {
                ++ans;
            }
            mark <<= 1;
        }
        System.out.println(ans);


    }
}

 

法三:对于上一种解法中,无用操作是,如果当前位是0, 还是会做判断,然后一位一位的移动。如果,给你一种超能力࿰

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值