reverse-interger 整数翻转

一、计算机中32位int类型变量的范围,其中int类型是带符号整数。
正数在计算机中表示为原码,最高位为符号位:
1的原码为0000 0000 0000 0000 0000 0000 0000 0001
2147483647的原码为0111 1111 1111 1111 1111 1111 1111 1111

所以最大的正整数是2147483647
负数在计算机中表示为补码,最高位为符号位:
-1:
原码为1000 0000 0000 0000 0000 0000 0000 0001,
反码为1111 1111 1111 1111 1111 1111 1111 1110,
补码为1111 1111 1111 1111 1111 1111 1111 1111
-2147483647:
原码为1111 1111 1111 1111 1111 1111 1111 1111,
反码为1000 0000 0000 0000 0000 0000 0000 0000,
补码为1000 0000 0000 0000 0000 0000 0000 0001
所以最小的负数是-2147483647吗?错,不是。
在二进制中,0有两种表方法。
+0的原码为0000 0000 0000 0000 0000 0000 0000 0000,
-0的原码为1000 0000 0000 0000 0000 0000 0000 0000,
因为0只需要一个,所以把-0拿来当做一个最小的数-2147483648。
-2147483648的补码表示为1000 0000 0000 0000 0000 0000 0000 0000,在32位没有原码。

注意,这个补码并不是真正的补码,真正的补码是1 1000 0000 0000 0000 0000 0000 0000 0000,溢出。
所以带符号32位int类型整数为-2147483648~2147483647
在编程中怎样使用最大和最小的数呢?C语言在limits.h中包含了极大和极小的整数值,直接调用就可以了。

#include <limits.h>
#include<stdio.h>
int max = INT_MAX;//最大数
int min = INT_MIN;//最小数
int main()
{
printf(“max = %d\nmin = %d\n”, max, min);
return 0;
}
在这里插入图片描述
二、vector常见用法总结
https://www.cnblogs.com/YJthua-china/p/6550960.html

三、实例
将给出的整数x翻转。
例1:x=123,返回321
例2:x=-123,返回-321 你有思考过下面的这些问题么? 如果整数的最后一位是0,那么输出应该是什么?比如10,100
你注意到翻转后的整数可能溢出吗?假设输入是32位整数,则将翻转10000000003就会溢出,你该怎么处理这样的样例?抛出异常?这样做很好,但是如果不允许抛出异常呢?这样的话你必须重新设计函数(比如添加一个额外的参数)。

class Solution {
public:
    int reverse(int x)
    {
        long long res = 0;
        while(x!=0)
        {
            res=res*10+x%10;
            x/=10;
            if(res>=INT_MAX||res<=INT_MIN)
                return 0;
        }
        return res;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值