精华内容
下载资源
问答
  • 如果反转后整数超过 32 位的有符号整数的范围 [-2 147 483 648,2 147 483 647] ,就返回 0。 假设环境不允许存储 64 位整数(有符号或无符号)。 示例 1: 输入:x = 123 输出:321 示例 2: 输入:x = -123 输出...

    一、题目

    给你一个 32 位的有符号整数 x ,返回 x 中每位上的数字反转后的结果。

    如果反转后整数超过 32 位的有符号整数的范围 [-2 147 483 648,2 147 483 647] ,就返回 0。

    假设环境不允许存储 64 位整数(有符号或无符号)。

    示例 1:

    输入:x = 123 输出:321

    示例 2:

    输入:x = -123 输出:-321

    示 例 3:

    输入:x = 120 输出:21 示例 4:

    输入:x = 0 输出:0

    提示:
    -2 147 483 648 <= x <= 2 147 483 647

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/reverse-integer
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    二、代码

    主要解决的问题为整型越界问题

    class Solution {
        public int reverse(int x) {
    	if(x==0)return x;
    	int a1=x;
    	int n=0;//多少位
    	int b=0;
    	int[] a2=new int[10];
    	while(a1!=0) {
    		a2[n++]=a1%10;
    		a1/=10;
    		if(n==9&&a1!=0) {
    		 if(Math.abs(a2[0])>2){return 0;}
                else if(Math.abs(a2[0])<2)continue;
                else if(Math.abs(a2[1])>1){return 0;}
                   else if(Math.abs(a2[1])<1)continue;
                	else if(Math.abs(a2[2])>4){return 0;}
                       else if(Math.abs(a2[2])<4)continue;
                    	else if(Math.abs(a2[3])>7){return 0;}
                         else if(Math.abs(a2[3])<7)continue;
                        	else if(Math.abs(a2[4])>4){return 0;}
                            else if(Math.abs(a2[4])<4)continue;
                            	else if(Math.abs(a2[5])>8){return 0;}
                                else if(Math.abs(a2[5])<8)continue;
                                	else if(Math.abs(a2[6])>3){return 0;}
                                    else if(Math.abs(a2[6])<3)continue;
                                    			else if(Math.abs(a2[7])>6){return 0;}  
                                                else if(Math.abs(a2[7])<6)continue;
                 if(Math.abs(a2[8])>4)
    				{return 0;}
                    else if(Math.abs(a2[8])<4)continue;
                else{
                    if(a1>0){
                    if(a1>7)return 0;}
                    else if(a1<-8)
                    return 0;
                }
    		}
    	}
    
    	while(x%10==0) {
    		x/=10;
    		n--;
    	}
        while(x!=0) {
        	b+=Math.pow(10, n-1)*(x%10);
        	x/=10;
        	n--;
        }
      return b;
        }
    }
    

    结果:
    在这里插入图片描述

    三、代码优化

    我们发现代码中有大量的if else,所以必然是需要进行优化的

    class Solution {
        public int reverse(int x) {
    	int res=0;
    	while(x!=0) {
    		int pop=x%10;
    		x/=10;
    		if(res>Integer.MAX_VALUE/10||(res==Integer.MAX_VALUE/10&&pop>7))return 0;
    		if(res<Integer.MIN_VALUE/10||(res==Integer.MIN_VALUE/10&&pop<-8))return 0;
    		res=res*10+pop;
    	}
    	return res;
        }
    }
    
    展开全文
  • 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。 假设环境不允许存储 64 位整数(有符号或无符号)。 示例 1: 输入:x = 123 输出:321 示例 2: 输入:x = -123 输出:-321 示例 3: ...

    每天一道算法题,拒绝当懒狗,一起进步

    题目

    给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

    如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。

    假设环境不允许存储 64 位整数(有符号或无符号)。

    示例 1:

    输入:x = 123
    输出:321
    示例 2:

    输入:x = -123
    输出:-321
    示例 3:

    输入:x = 120
    输出:21
    示例 4:

    输入:x = 0
    输出:0

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/reverse-integer
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    思路

    我的思路很简单,就是%10取余数得到最后一位,然后/10再%10得到倒数第二位,以此类推所有位置的数都能求出来,比如最后一位要转化到第一位就乘以几次10,次数正好就是整数/10一直到为0的次数.(有点抽象,具体看代码吧)

      public int reverse(int x) {
     int reverse = 0;
    	        while(x!=0){
    	          
    	            if (reverse>Integer.MAX_VALUE/10||(reverse==Integer.MAX_VALUE/10&&x>7)){
    	                return 0;
    	            }
    	            if (reverse<Integer.MIN_VALUE/10||(reverse==Integer.MIN_VALUE/10&&x<-8)){
    	                return 0;
    	            }
    	            reverse = reverse*10+x%10;
    	            x=x/10;
    	           
    	        }
    
    	        return reverse;
        }
    

    补充:这道题目中我反正这个点考虑好久,然后看大神讲解才明白的,题目还要求反转后整数不能超过 32 位,就是 reverse = reverse*10+x%10>max就超过了,就是reverse>Integer.MAX_VALUE/10,负数同理,为啥等于的时候整数是7负数是8,正数最大2147483647,负数是 -2147483648,所以哪怕你这个看不懂,直接判断在 -2147483648–2147483647之间就行了!

    总结:题目中主要的就是 reverse = reverse*10+x%10; x=x/10;
    要求注意下细节就好了!

    展开全文
  • 事实上,远古时期有些计算机的设计是采用了反码表示有符号数的,因此8位有符号的范围是-127~127,它的一个缺点是0是有正负。它用一位表示正负数,然对剩余的位数采用取反。 比如,0111 1111表示127,那-127的则是...

    八位的带符号的整数,比如JAVA中的byte,c#中的SByte,为什么值域范围都是-128-127而不是-127~128?

    事实上,远古时期有些计算机的设计是采用了反码表示有符号数的,因此8位有符号数的范围是-127~127,它的一个缺点是0是有正负。它用一位表示正负数,然对剩余的位数采用取反。

    比如,0111 1111表示127,那-127的则是1000 0000。0000 0000表示正的0,而1111 1111则表示成为负0。因此反码作为有符号的整数并未流行。

    现在的计算机中,通常将正数的补码来表示其负数,采用补码的好处是在硬件电路的实现上,只要使用一种加法电路就可以处理各种有符号数的加减计算,使得电路设计简单。

    而补码计算方式为取反码加1,比如,对于正数0000 0001的一个补码计算,

    首先取反码成为1111 1110,然后+1,变成1111 1111。所有-1的表示就是1111 1111

    那么问题来了,八位整数中,如果首位表示正数,那么最多就到127,无法128,那么-128是怎么出来的?

    如果我们假设1000 0000表示的是128,取反码,得到的是0111 1111,再加1有变成了1000 0000,也就是128的反码就是它本身,128和-128是一个数。由于在计算机中表示有符号数时,通常将最高有效位为0的认为是正数,最高有效位为1的认为是负数,因此1000 0000就表示为-128了。所以8位有符号整数的范围是-128~127。

    事实上,还有一个更好理解的方式,-127的表示方式为1000 0001,那么-128=-127-1

    即-128=1000 0001-0000 0001=1000 0000















    本文转自cnn23711151CTO博客,原文链接: http://blog.51cto.com/cnn237111/1634923,如需转载请自行联系原作者











    展开全文
  • 有符号整数的表示范围

    千次阅读 2017-08-26 14:10:33
    结论: n比特有符号整数的表示范围为 \(-2^{n-1} ~ 2^{n-1}-1\)

    结论:

    • n比特有符号整数的表示范围为 \([-2^{n-1} \quad 2^{n-1}-1\)]

    (1) 对于无符号n比特整数,表示范围很好理解\([0 \quad 2^{n}-1\)];

    (2) 对于有符号整数,计算机使用补码表示,同时在表示时采用了下面的准则:

    • 最高位为符号位,正数为0,负数为1;
    • 正数的反码以及补码与原码相同;
    • 负数需要对除符号位以外的所有位取反得到反码,然后反码加1得到补码。

    下面给出一些具体情况的分析:

    (1)为什么有符号char的表示范围是-128~127?

    00000000到01111111,表示0到+127。10000001到11111111,表示-1到-127。大家可以注意到,10000000我们没有用到。因为如果我们把它看成-0,那么会和00000000发生重复。于是计算机将10000000定义为-128

    展开全文
  • 符号整数类型的范围:整数类型:byte,short,int,longbyte: 8 位 -128--->127short 16位 -32768--->32767int 32位 -2147483648-->2147483647long 64位 -9223372036854775808 --> 9223372036854775807为...
  • 在Wikipedia上阅读有关Integer Overflow的文章我不太了解为什么有符号整数的溢出会导致未定义的行为,而无符号整数的溢出会导致回绕。为什么它们的行为有所不同?另一个问题:编程语言总体上是否可以防止整数溢出?...
  • 1 数据类型简介 ...C/C++中四个基本内置数据类型。char是用于存储字符;int存储整数值;float和double存储浮点数值,其中float用于单精度浮点数,而double用于双精度浮点数。 2 说明符 说明符(specif
  • i 为有符号整数,取值范围:-32768——32767unsigned int j; j 为无符号整数,取值范围:0——65535 MSDN对Uint64 描述: 表示 64 位无符号整数 此 API 不兼容 CLS。兼容 CLS 替代 API 为 Decimal。...
  • short、int、long 是C语言中常用三种整数类型,分别称为短整型、整型、长整型。在现代操作系统中,short、int、long 长度分别是 2、4、4 或者 8,它们只能存储有限数值,当数值过大或者过小时,超出部分会被...
  • short、int、long 是C语言中常用三种整数类型,分别称为短整型、整型、长整型。在现代操作系统中,short、int、long 长度分别是 2、4、4 或者 8,它们只能存储有限数值,当数值过大或者过小时,超出部分会被...
  • 注意:假设我们环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。实现思想:将整型转化为字符串;利用字符串进行顺序反转;利用异常处理...
  • “我们活着不能与草木同腐,不能醉生梦死,枉...(难度:简单)示例1:输入:123输出:321示例2:输入:-123输出:-321示例3:输入:120输出:21注意:假设我们环境只能存储得下32位的有符号整数,则其数值范围为[−...
  • 如果反转后整数超过 32 位的有符号整数的范围[−231, 231− 1],就返回 0。 上代码: public static int reverse(int x){ if(x==0){ return 0; } long res = 0; while (x != 0){ res = res * 10 ...
  • C/C++中,整型数据是用int来进行定义的,整型的范围就是指int类型所能表示的整数的范围。 最高位表示符号位,正数符号位为0。int能表示的最大正整数为:0111 1111 1111 1111 1111 1111 1111 1111 ()对应的10进制数为...
  • 给出一个 32 位的有符号整数,你需要将这个整数中每位上...假设我们环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。 来源:力扣(Lee...
  • 示例 1:输入: 123 输出: 321 示例 2:输入: -123 输出: -321 示例 3:输入: 120 输出: 21 注意:假设我们环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 − 1]。请根据这个假设,如果反转后整数...
  • 给出一个 32 位的有符号整数,你...输出: 21注意:假设我们环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。# # @lc app=leetcode.cn ...
  • C#开发,收到下位机串口数据(温度信息),可能是正数也可能是负数,如何转换?...补充知识:c# byte数组转换 8位有符号整数 16位有符号整数 32位有符号整数 byte数组 byte[] aa = new byte[] { 0xF8
  • 整数溢出——无符号和有符号整数

    千次阅读 2015-08-02 20:20:06
    里面说到,无符号整数是不存在“溢出有符号整数才会”溢出”。一般理解,溢出就是运算结果超出了本身表示范围。那么其实无符号整数也是会溢出。之所以说没有所谓“溢出”一说,是因为无符号运算是明确定义...
  • 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。 public static void main(String[] args) { // TODO Auto-generated method stub Scanner scanner = new Scanner(System.in); ...
  • 示例1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们环境只能存储得下 32 位的有符号整数,则其数值范围为[−2^31, 2^31 − 1]。请根据这个假设,如果反转后整数溢出那么...
  • 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。 假设环境不允许存储 64 位整数(有符号或无符号)。 示例 1: 输入:x = 123 输出:321 示例 2: 输入:x = -123 输出:-321 示例 3...
  • 整数的安全范围数字的呈现方式决定了“整数”的安全值范围远远小于 Number.MAX_VALUE。能够被“安全”呈现的最大整数是 2^53 - 1,即 9007199254740991,在 ES6 中被定义为 Number.MAX_SAFE_INTEGER。最小整数是 -...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,589
精华内容 2,235
关键字:

有符号整数的范围