精华内容
下载资源
问答
  • 获取long类型最后一个数字
    千次阅读
    2021-02-28 11:56:47

    展开全部

    语法?一条公式?搞不清你说的是什么意思。

    没仔细看32313133353236313431303231363533e78988e69d8331333335333763你的要求,重新修改了一下。Scanner input = new Scanner(System.in);

    System.out.println("请输入数字!");

    String str = input.next();

    Long data = 0L;

    try {

    data = Long.valueOf(str);

    } catch (NumberFormatException e) {

    System.out.println("你输入的不是数字");

    return;

    }

    int size = 1;

    while ((data = data / 10) != 0) {

    size++;

    }

    input.close();

    System.out.println("数字的位数:" + size);

    请说的专业一点吧。越看越坑,“只能用提供网站的class来编程”实在是听不懂。

    更多相关内容
  • 例如15253的第2位数字, 就是15253/10%10。 public class TheKNumber { public int getKNumber(int k,int num){ //如果k越界,则返回-1 if(Math.pow(10, k-1)>num){ return -1; }else{ return ...

    首先这里声明k代表从右到左,并且由1开始计数。
    例如15253的第2位数字,
    就是15253/10%10。

    public class TheKNumber {
    	public int getKNumber(int k,int num){
    		//如果k越界,则返回-1
    		if(Math.pow(10, k-1)>num){
    			return -1;
    		}else{
    			return (num/(int)Math.pow(10, k-1))%10;
    		}
    	}
    	public static void main(String[] args) {
    		TheKNumber te=new TheKNumber();
    		System.out.println(te.getKNumber(2, 15253));
    	}
    }
    
    展开全文
  • public class Main { public static int solution(long num) { int count = 0; while (num != 0) { if (num != (num >> 1) << 1) { count++; } num = num >> 1; }

    方法一:

    public class Main {
        public static void main(String[] args) {
        	long a = 17L
            System.out.println(Long.bitCount(a));
        }
    }
    

    方法二:

    public class Main {
    
        public static int solution(long num) {
            int count = 0;
            while (num != 0) {
                if (num != (num >>> 1) <<< 1) {
                    count++;
                }
                num = num >>> 1;
            }
            return count;
        }
    
        public static void main(String[] args) {
            System.out.println(solution(17L));
        }
    }
    
    

    使用位运算,将该数向右位移一位,这样就自动将该数字的二进制表示的最后一位舍弃掉。然后再将舍弃一位的数左移一位,这样恢复的数就是最后一位是0;当它和原先的数字比较时,如果相同,则表示原先舍弃的那位数字是0,不同则为1。不断重复该过程,统计1的个数直到改数变成0,则表示所有的1都已计算完毕
    注:>>和>>>都是右移操作,但是不同的是>>>是右移后,左边补0,而>>的左边第一位是符号位

    方法三:

    public class Main {
    
        public static int solution(long num) {
            int count = 0;
            while(num != 0){
                count += num & 1;
                num >>>= 1;
            }
            return count;
        }
    
        public static void main(String[] args) {
            System.out.println(solution(17L));
        }
    }
    

    使用1和num做“与”运算,如最后一位是0,则运算后依旧是0,如果是1,运算过后就是1,然后不断将num更新为右移之后的值,这样直到num等于0结束

    展开全文
  • 输入一个long类型的数,输出该数二进制表示中0的数量

    题目描述:

    题目解析:

    首先我们需要了解的是long类型数据的二进制表示是怎样的。

    众所周知,long占8个byte,1byte=8bit,故long占64位。在Java中,long是64位有符号的数据类型。范围是-2^{63}~2^{63}-1,亦即-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。而二进制数在内存中以补码的形式存储的,正数的补码就是该数转化为二进制,负数的补码为符号位是1,其它位是对应正数的二进制的取反加一。故我们可以得到如下示例:

    在回顾了基础知识以后,接下来就可以我们开始做题了~~

    方法一: 

    最简洁的方法是使用Java中封装的现成的统计整数二进制中1的个数的方法:

    public static int getNumberOfDigitZero(long value) {
            return 64-Long.bitCount(value);  //Long.bitCount(value):输出value的二进制中所含1的个数。而long的二进制有64位且二进制数中除了1就是0,故64-Long.bitCount(value)即所求。
    }

    方法二:

    因为正数和负数补码的转化方式不同,故针对这种情况,我们要不就是对正数和负数的操作应该分开处理,要不就是找到一个对正数和负数都可以处理的方法。对于第一种思路我们可以对负数做一些操作,将最高位的符号位1变成0,即n & 0x7FFF_FFFF_FFFF_FFFFL,这样就可以把负数转化成正数了。转化前后唯一区别是最高位由1变成0,所以计算时0的数量时要减1。而对正数的处理就是不断除二,再根据除二的余数计算0的数量。 

    public static int getNumberOfDigitZero(long value) {
            int count = 64;
            if(value < 0) {
                value = value & 0x7FFF_FFFF_FFFF_FFFFL;
                count --;
            }
            while(value != 0){
                if(value%2 == 1){
                    count--;
                }
                value /= 2;
            }
            return count;
    }

    方法三:

    因为对于二进制数,除二操作与把整数右移一位在数学上是等价的,而且和1做与运算也可以达到取余操作所达到的效果。又因在计算机中,乘除法的效率比位运算低很多,所以我们可以用位运算代替乘除法。

    public static int getNumberOfDigitZero(long value) {
        int count = 64;
        if (value < 0){
            value = value & 0x7FFF_FFFF_FFFF_FFFFL;
            count --;
        }
        while (value != 0){
            if ((value & 1) == 1){
                count--;
            }
            value >>>= 1;
        }
        return count;
    }

    注:Java的右移运算符>>,>>>:

    >>  :算术右移运算符,也称带符号右移。按二进制形式把所有的数字向右移动对应位数,低位移出,高位的空位补符号位,即正数补0,负数补1。左边第一位为符号位保持不变。

    >>>:逻辑右移运算符,也称无符号右移。按二进制形式把所有的数字向右移动对应位数,低位移出,高位的空位补零。即直接整体右移,用0填充左侧的空位。

    对于正数来说两者相同,对于负数来说不同。

    方法四:

    同样使用位运算,将该数使用“>>>”向右位移一位,这样就自动将该数字的二进制表示的最后一位舍弃掉。然后再将舍弃一位的数左移一位,这样恢复的数就是最后一位是0(左移“<<"是将二进制表示左边移出的数补在右边);当它和原先的数字比较时,如果相同,则表示原先舍弃的那位数字是0,不同则为1。这种方法不用考虑正负数问题了,代码更简洁:

    public static int getNumberOfDigitZero(long value) {
        int count = 64;
        while (value != 0) {
            if (value != ((value >>> 1) << 1)) {
                count--;
            }
            value = value >>> 1;
        }
        return count;
    }

    方法五:

    由方法四进一步思考,在位运算中,如果把一个整数减去1在与它本身做与运算,那么就会把该整数二进制表示中最右边一个1变成0。因此可得:

    public static long getNumberOfDigitZero(long value) {        
        int count = 64;
        while (value != 0){
            value = value & (value-1);
            count--;
        }
        return count;
    }

    注:这是博主第一次发文章,若有不足请多指教,欢迎大家一起讨论~~

    展开全文
  • 后台传入的雪花id在前端被截断,id超过19位最后两位为00
  • 数据库表id一边定义为Long类型,对应数据库类型为bigint。 我这边的情况是,数据库的id虽然是自增,但开始因为一些原因,起始值特别特别大,java后端处理过程中没有什么问题,也不会出现失真。 但是,前端获取的...
  • java怎么判断是否是Long类型

    千次阅读 2021-02-12 23:28:48
    java怎么判断是否是Long类型发布时间:2020-04-28 13:42:40来源:亿速云阅读:706作者:小新今天小编给大家分享的...java判断是否是Long类型1、首先定义一个getType方法,接收一个Object类型的参数;2、然后使用get...
  • 如何在java中对Long类型进行判断

    千次阅读 2021-02-27 23:08:48
    如何在java中对Long类型进行判断发布时间:2021-01-27 17:23:13来源:亿速云阅读:95作者:Leah这期内容当中小...java判断是否是Long类型1、首先定义一个getType方法,接收一个Object类型的参数;2、然后使用getClas...
  • java判断是否是Long类型1、首先定义一个getType方法,接收一个Object类型的参数;2、然后使用getClass方法获取class类型的对象;3、再使用toString()方法转为字符串,并使用substring截取字符串获得变量类型;4、...
  • 我编写了一个简单的自动单击脚本,它运行良好,因为每次我认为都应该单击它.我想知道的一件事是,它被延迟了2500毫秒到5000毫秒之间的随机间隔.我不是100%正在这样做吗?所有代码都在这里:public static void click...
  • 今天在写一个java线程的时候,想让线程休眠720小时候继续执行,代码如下:long runSperiod = 720 * 60 * 60 * 1000;Thread.sleep(runSperiod)启动线程测试的时候,发现线程并没有按照预想的720小时候后执行,而是...
  • 文章目录1.引子2.具体问题(1)初试EL表达式取long型数值...在做项目中,发现了一个诡异的事情,后台的long数字不能正确地在前端页面显示。经过我的反复排查问题,总算是找到了问题原因所在,希望能帮助到大家,让...
  • 后端使用的是雪花算法自动生成17位数字的id。
  • java中的Long类型对象(19位),赋值给ElasticSearch同样为Long类型的字段。 问题展现: 我在java类中的属性赋值为1513123398362902533,给ElasticSearch中传递后,在elasticsearch-head-master中显示文档中对对应...
  • 使用mybatisPlus主键生成策略时 当id 类型为ID_WORKER 时,前台js 会自动将long类型的后两位四舍五入 解决办法:@JsonSerialize(using = ToStringSerializer.class) @TableId(type = IdType.ID_WORKER) 导包:import...
  • 最近帮人搞项目,由于没怎么对接,后端就直接返回long类型的id,这搞得前端比较被动,后端如果处理long类型,会影响其他功能,索性前端想办法解决吧,正所谓:没有解决不了的问题只是看你想不想解决 干货 经过一番...
  • C语言long

    2021-05-19 13:07:55
    C语言long教程C语言long定义详解语法long int varname = value;long varname = value; //简写参数参数描述long int定义 long 类型变量...说明使用 long 定义了一个 long 类型的变量 varname,并赋初值为 value,同...
  • 前端获取long型数值精度丢失,后面几位都为0 问题重现: 小编使用mybatisPlus的雪花ID时,遇到了Long型id精度丢失问题 前端接口获取数据: 用postman请求的数据 解决方案: 1.在后台把long型改为String类型(推荐...
  • 问题描述 错误的ID,最后两位数都是0...拿postman测试接口没有问题,查到的是正确的数据,原来是因为Long类型数据传给前端可能精度丢失,js中的数据类型不能包含所有的java long值。 这问题真是在前后端连接的夹缝中
  • 篇也不例外,读Long类确实需要比较广泛的知识面,我也是一边在OSChina和stackoverflow上提问,一边慢慢的钻研,难免会存在偏差。先来看简单的。public static int signum(long i) {// HD, Sect...
  • 背景 由于在项目中使用到了WebSocket的自定义二进制协议,需要将二进制转为后端服务中定义的Long型。而在JavaScript中的Number类型由于自身原因...在GitHub中,有一个实现了在JavaScript中存储Long型的对象,具体代...
  • 点击查看C语言 从键盘上输入一个正整数,计算并输出该数的各位数字之和具体信息答:思路:定义变量a接受键盘输入和变量sum保存a的各位数字之和,依次对a进行除10操作,并把a除10的余数加到sum中,直到a为0为止,sum...
  • Java读取Oracle中LONG类型数据

    千次阅读 2019-02-21 16:23:29
    我在读取某张表的时候,发现,其中的一个字段的类型LONG(长字符串类型,最大可存储2G的内容), 然后我通过mybatis,查询数据库,自动封装到JavaBean中,用String类型来接受,发现报错(Causedby:java.sql....
  • 最近在写的一个项目后台 用到的实体类主键ID是用idworker生成的Long类型唯一id 由于之前一直用字符串id 所以突然发现Long类型数据通过JSON传到前端发生精度丢失 精度丢失 javascript 的 Number 类型最大长度是17位;...
  • oracle数据库中的类型LONG(这里的long,不是数字类型),Java中定义为了String字符串,后台获取的时候报错,说什么流关闭,搜了好多文章,大多数都解决不了,找的道路很漫长,既然最后解决了,那就更要记录一下。...
  • VC常用数据类型使用转换详解 (zhuan tie)作者:程佩君刚接触VC编程的朋友往往对许多数据类型的转换感到迷惑不解,本文将介绍一些常用数据类型的使用。我们先定义一些常见类型变量借以说明int i = 100;long l = 2001;...
  • 场景介绍: ...优点:雪花算法id是一个64bits的Long数据,第一位为零表示其为正数,最后12位为其序列号,生成的id既能完美契合分布式ID的需求,同时后12位序列号也能够保证主键的有序性。 缺点:雪花算法
  • spring cloud alibaba项目中long类型数据返回前端最后两位变成00,参考了很多博客最后这篇对此项目有效果: 解决办法之就是让Javascript把数字当成字符串进行处理,对Javascript来说如果不进行运算,数字和字符...
  • 每天早上七点三十,准时推送干货最近几天一直在改造工程,采用雪花算法生成主键ID,突然踩到一个天坑,前端 JavaScript 在取 Long 型参数时,参数值有点不太对!一、问题描述最近...
  • JavaScript 数据类型和数据结构直接引用原文:数据类型最新的 ECMAScript 标准定义了 8 种数据类型:Number 数字类型根据 ECMAScript 标准,JavaScript 中只有数字类型:基于 IEEE 754 标准的双精度 64 位二进制...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 113,260
精华内容 45,304
关键字:

获取long类型最后一个数字