首页 > 试题广场 >

反转数字

[编程题]反转数字
  • 热度指数:61990 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个32位的有符号整数num,将num中的数字部分反转,最后返回反转的结果
1.只反转数字部分,符号位部分不反转
2.反转后整数num超过 32 位的有符号整数的范围 [−231,  231 − 1] ,返回 0
3.假设本题不允许存储 64 位整数(有符号或无符号,即C++不能使用long long ,Java不能使用long等)

数据范围:
-231 <= x <= 231-1
示例1

输入

12

输出

21
示例2

输入

-123

输出

-321
示例3

输入

10

输出

1
示例4

输入

1147483649

输出

0
public int reverse(int num) {
        boolean negative = false;
        if (num < 0) {
            num = -num;
            negative = true;
        }
        int result = 0;
        while (num != 0) {
            int digit = num % 10;
            int newresult = result * 10 + digit;
            if (((newresult - digit) / 10) != result) {
                return 0;
            }
            result = newresult;
            num = num / 10;
        }
        if (negative) {
            result = -result;
        }
        return result;
    }

发表于 2024-05-10 20:31:27 回复(0)
public int reverse (int x) {
    // write code here
    int num=0;
    while(x!=0){
        int temp=num*10+x%10;
        if((temp-x%10)/10!=num){
            return 0;
        }
        num=temp;
        x/=10;
    }
    return num;
}

编辑于 2024-03-03 15:19:41 回复(0)

转成字符串来处理

import java.util.*;


public class Solution {
    /**
     *
     * @param x int整型
     * @return int整型
     */
    public int reverse (int x) {
        String str = "" + x;
        if (str.startsWith("-")) { //负数,最小值-2147483648
            String noneStr = reverseStr(str.substring(1));
            String aStr = "-" + noneStr;
            String outStr="2147483648";
            if(noneStr.length()==outStr.length()&&isOutOfRange(outStr,noneStr)){
                return 0;
            }

            return Integer.parseInt(aStr);

        } else { //正数,最大值2147483647
            String b = reverseStr(str);

            String bigestStr = "2147483647";
            if (b.length() == bigestStr.length()&&isOutOfRange(bigestStr,b)) {       
                return 0;
            }
            return Integer.parseInt(b);
        }

    }

    public boolean isOutOfRange(String rangeStr, String currStr) {
        if(currStr.startsWith("0")){//处理特殊值,例如2147483640,倒转之后是不会越界的
            return false;
        }
        for (int i = 0; i < rangeStr.length(); i++) {
            int num1 = Integer.parseInt("" + currStr.charAt(i));
            int num2 = Integer.parseInt("" + rangeStr.charAt(i));
            if (num1 > num2) {       
                return true;
            }
        }
        return false;
    }

    public String reverseStr(String str) {
        if (str == null || str.length() == 0) {
            return "";
        }
        return reverseStr(str.substring(1)) + str.charAt(0);
    }
}
发表于 2022-11-06 10:27:53 回复(0)
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param x int整型 
     * @return int整型
     */
    public int reverse (int x) {
        // write code here
        int tag = 1;
        if (x < 0) {
            tag = -1;
            x = -x;
        }
        int a = x, b = 0;
        while (a != 0) {
            if(b > Integer.MAX_VALUE / 10|| x < Integer.MIN_VALUE / 10) return 0;
            b = b * 10 + a % 10;
            a = a / 10;
        }
        return b * tag;
    }
}

发表于 2022-09-04 15:31:49 回复(0)
好多人不看题目啊!题干不是写了不允许用long类型了吗
3.假设本题不允许存储 64 位整数(有符号或无符号,即C++不能使用long long ,Java不能使用long等)
 public int reverse (int x) {
        // write code here
        int m=0,n=0;
        while(x!=0){
            m=m*10;
            m+=x%10;
            x=x/10;
            if(m==Integer.MAX_VALUE/10&&x%10>Integer.MAX_VALUE%10||m>Integer.MAX_VALUE/10&&x!=0||m==Integer.MIN_VALUE/10&&x%10>Integer.MIN_VALUE%10
              ||m<Integer.MIN_VALUE/10&&x!=0){
                return 0;
            }
        }
        return m;
    }

发表于 2022-08-03 09:00:19 回复(0)
import java.util.*;


public class Solution {
    /**
     * 
     * @param x int整型 
     * @return int整型
     */
    public int reverse (int x) {
        // write code here
        
     int ret = 0;
        while (x != 0) {
            int temp = ret * 10 + x % 10;
            if (temp / 10 != ret)
                return 0;
            ret = temp;
            x /= 10;
        }
        return ret;
}
}

发表于 2022-04-19 13:53:44 回复(0)
api工程师:)
public int reverse (int x) {
        // write code here
        int y=0;
        if(x>0){
            String s=x+"";
            String ss=new StringBuffer(s).reverse().toString();
            try{
                y=Integer.parseInt(ss);
            }catch(Exception e){
                return 0;
            }
        }else if(x==0){
            y=x;
        }else{
            String s=Math.abs(x)+"";
            String ss=new StringBuffer(s).reverse().toString();
            try{
                y=(-1)*Integer.parseInt(ss);
            }catch(Exception e){
                return 0;
            }
        }
        return y;
    }


发表于 2022-04-14 17:47:16 回复(0)
import java.util.*;


public class Solution {
    /**
     * 
     * @param x int整型 
     * @return int整型
     */
    public int reverse (int x) {
        // write code here
        int res=0;
        while(x!=0){
            res=res*10+x%10;
            if(res-x%10!=res/10*10) return 0; //溢出判断
            x=x/10;
        }
        return res;
    }
}

发表于 2022-03-22 16:12:04 回复(0)
import java.util.*;


public class Solution {
    /**
     * 
     * @param x int整型 
     * @return int整型
     */
    public int reverse (int x) {
        // write code here
        int ans = 0;
        while(x != 0) {
            if(ans  >= Integer.MAX_VALUE/10 || ans  <= Integer.MIN_VALUE/10) {
                return 0;
            }
            ans = ans*10 + x%10;
            x = x/10;
        }
        return ans;
    }
}

发表于 2022-01-30 16:52:37 回复(0)

哪有那么复杂,而且好多答案都用了long

    public int reverse (int x) {
        // write code here
        final int limit = Integer.MAX_VALUE / 10;
        int val = 0;
        while (x != 0) {
            if (val > limit || val < -limit)
                return 0;
            val = val * 10 + x % 10;
            x /= 10;
        }
        return val;
    }

其实只有溢出需要额外判断,也就是先用 INT_MAX / 10 = 214748364 判断溢出,然后计算 val

不能先计算 val 再用 INT_MAX 和 INT_MIN 判断,因为 val 可能溢出

至于为什么不需要处理等于 214748364 的情况,因为这种情况不可能出现,假设这一轮计算得 val = 214748364x,原来的数一定是 x463847412,又因为是 32 位整数,x 只能为 0 或 1,因此 val 一定不会溢出

这网站编辑器都好难用啊

发表于 2022-01-12 00:06:58 回复(0)
public int reverse (int x) {
        // write code here
        String origin = String.valueOf(x);  //将int转化为string进行操作
        String res = "";   //存放最终结果
        boolean flag = false;  //false代表正数
        if(x == 0 || x < Integer.MIN_VALUE / 10 || x >= Integer.MAX_VALUE / 10){
            return 0;
        }
        //如果是10的倍数 包括10 100 120等等 一直除以10 除到不是10的倍数就停止
        if(x % 10 == 0 ){
            int num = x / 10;
            while(num % 10 == 0){
                num = num / 10;
            }
            origin = String.valueOf(num);  //因为反之像120这种返回的是21 
                                            //所以还需要继续按照下面的for循环
        }
        for(int i = 0 ; i < origin.length() ; i ++){
            if(origin.charAt(i) == '-'){
                flag = true;  //是负数
            }else{
                res = String.valueOf(origin.charAt(i)) + res;
            }
        }
        if(flag == true){
            res = "-" + res;
        }
        return Integer.parseInt(res);
    }

发表于 2022-01-03 20:21:17 回复(0)
import java.util.*;


public class Solution {
    /**
     * 
     * @param x int整型 
     * @return int整型
     */
    public int reverse (int x) {
    int fu=x>0?1:-1;
     x=Math.abs(x);
        if(x==0)return 0;
     long num=0;
        while(x!=0){
            int y= x%10;
            num=num*10+y;
            if(num>Integer.MAX_VALUE) return 0;
            x=x/10;
        }
        return fu*(int)num;
    }
}
发表于 2021-12-26 12:27:18 回复(0)
public int reverse (int x) {
        // write code here
        int reverse = 0;
        while(x != 0){
            if (reverse > Integer.MAX_VALUE / 10 || (reverse == Integer.MAX_VALUE / 10 && x % 10 > 7)) 
                return 0;
            if (reverse < Integer.MIN_VALUE / 10 || (reverse == Integer.MIN_VALUE / 10 && x % 10 < -8)) 
                return 0;
            reverse = reverse * 10 + x % 10;
            x = x/10;
        }
        
        return reverse ;
    }

发表于 2021-12-08 20:14:58 回复(0)
import java.util.*;


public class Solution {
    /**
     * 
     * @param x int整型 
     * @return int整型
     */
    public int reverse (int x) {
        String str=String.valueOf(x);
        char []arr=str.toCharArray();
        String new_x="";
        //如果溢出返回0
        if(arr.length>=10){
            return 0;
        }
        //使用倒序添加到新的字符串上
        for(int i=arr.length-1;i>=0;i--){
            new_x+=arr[i];
        }
        //如果有负号的话,进行分割
        if(new_x.contains("-")){
           String [] a=new_x.split("-");
           return -Integer.parseInt(a[0]);
        }
        return Integer.parseInt(new_x);
    }
}

发表于 2021-10-29 18:29:42 回复(0)
public int reverse (int x) {
    int res = 0;
    boolean flag = false;
    if(x < 0){
        flag = true;
        x = -x;
    }
    while(x > 0){
        if(res > Integer.MAX_VALUE/10 || (res == Integer.MAX_VALUE/10 && x > Integer.MAX_VALUE%10)){
            return 0;
        }
        res = res * 10 + x % 10;
        x = x / 10;
    }
    if(flag) return -res;
    return res;
}

发表于 2021-10-19 10:30:52 回复(0)
//用StringBuffer反转字符串的骚操作 哈哈  
public int reverse (int x) {
        // write code here
        boolean sign = true;
        if(x<0){
            sign = false;
            x = -x;
        }
        StringBuffer sb = new StringBuffer(x+"");
        sb.reverse();
        if(!sign){
            sb.insert(0,"-");
        }
        try{
            return Integer.parseInt(sb.toString());
        }catch(Exception e){
            return 0;
        }
    }
发表于 2021-09-03 18:55:30 回复(0)
    public int reverse (int x) {
        // write code here
        int res = 0;
        while(x != 0){
            res = res*10+x%10;
            if(res > Integer.MAX_VALUE || res < Integer.MIN_VALUE)    return 0;
            x = x/10;
        }
        
        return res;
    }
发表于 2021-08-22 21:15:54 回复(0)