整数反转(C, C++, Python)

  • 1. C语言实现
  • 2. C++语言实现
  • 3. python语言实现



本文讲述了Math类中第7个问题的几种解法,实现语言包括C,Python以及C++。


问题描述:


Python溢出的最大值 python整数溢出_整型


问题分析:


这个问题最重要的地方就是整数溢出的问题,我们的取值范围为[-2147483648, 2147483647], 如果输入数字为 2147483646,那么输出结果就是6463847412,这就超过了32位,造成溢出了。我们需要留意的就是在程序中加上判断是否溢出的条件即可。

1. C语言实现

C语言实现整数反转的方法比较直白和简单,依次取出输入值的每一位数字然后进行反转即可,代码如下:

int reverse(int x){
	// 定义长整型变量ans用来存储结果,之所以用长整型是因为考虑到结果会有溢出的概率,超过了int型的存储范围
    long int ans = 0; 
    // while循环中开始进行整数反转
    while(x != 0){
    	// 定义pop用来存储x的最后一位的数字
        int pop = x % 10;
        // 更新输出结果
        ans = ans * 10 + pop;
        // 更新x的值
        x = x / 10;
    }
    // 加条件进行判断输出结果是否溢出
    if((ans<-2147483648)|(ans>2147483647))
        return 0;
    // 返回结果
    return ans;
}

运行结果为:

Python溢出的最大值 python整数溢出_返回结果_02

2. C++语言实现

C++的实现和C的实现原理是相同的,再次不在赘述,代码如下:

class Solution {
public:
	int reverse(int x){
		// 定义长整型变量ans用来存储结果,之所以用长整型是因为考虑到结果会有溢出的概率,超过了int型的存储范围
	    long int ans = 0; 
	    // while循环中开始进行整数反转
	    while(x != 0){
	    	// 定义pop用来存储x的最后一位的数字
	        int pop = x % 10;
	        // 更新输出结果
	        ans = ans * 10 + pop;
	        // 更新x的值
	        x = x / 10;
	    }
	    // 加条件进行判断输出结果是否溢出
	    if((ans<-2147483648)|(ans>2147483647))
	        return 0;
	    // 返回结果
	    return ans;
};

运行结果为:

Python溢出的最大值 python整数溢出_整型_03

3. python语言实现

python实现的方式与C和C++不同,其实现过程如下:

  • 将输入转化为字符串
  • 将字符串进行反转,在反转的过程中要对输入的正负判断
  • 将反转得到的结果在转化为整型
  • 对反转的结果进行判断是否溢出
    代码如下:
class Solution:
    def reverse(self, x: int) -> int:
    	# 根据输入的正负反转字符串
        string_x = str(x)[::-1][:-1]  if x < 0 else str(x)[::-1]
        # 判断是否溢出
        if int(string_x)<-2147483648 or int(string_x) >2147483647:
            return 0
        else:
        	# 根据输入的正负添加负号‘-’
            return int('-' + string_x)  if x < 0 else int(string_x)

运行结果为:

Python溢出的最大值 python整数溢出_字符串_04