当前位置: 首页 > news >正文

NC57 反转数字

描述
给定一个32位的有符号整数num,将num中的数字部分反转,最后返回反转的结果
1.只反转数字部分,符号位部分不反转
2.反转后整数num超过 32 位的有符号整数的范围 [−231, 231 − 1] ,返回 0
3.假设本题不允许存储 64 位整数(有符号或无符号,即C++不能使用long long ,Java不能使用long等)

数据范围:
-2 ^31 <= x <= 2 ^31-1

示例1
输入:12
返回值:21

示例2
输入:-123
返回值:-321

示例3
输入:10
返回值:1

示例4
输入:1147483649
返回值:0

思路:采用字符串的形式倒过来,最后判断形参决定是否为负数并返回。

import java.util.*;


public class Solution {
    /**
     *
     * @param x int整型
     * @return int整型
     */
    public int reverse (int x) {
        // write code here
        if (x > Math.pow(2, 31) - 1 || x < Math.pow(-2, 31)) return 0;
        String str = Math.abs(x) + "";
        String val = "";

        for (int i = str.length() - 1; i >= 0; i--) {
            val += str.charAt(i);
        }
        int result = Integer.parseInt(val);
        return x > 0 ? result : -result;
    }
}

在这里插入图片描述
原因:进入Integer引用类型类中时,可以看到该类对象值为-2 ^ 31 -----2 ^ 31之间。输入是没有问题的,但是输出时,这个值就大于2 ^ 31了,因此报错。
解决方案:采用long的形式定义值,随后强制转换返回值(int)n==n?(int)n:0
在这里插入图片描述
但是当x = -2^ 31时,该值用Math.abs通过绝对值以后还是负数,由于变更符号导致又返回负数。
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
因此,判断定义为绝对值后是否为负数,若为负数则直接返回0,由于反转也还是0。
最后代码版本:

import java.util.*;


public class Solution {
    /**
     *
     * @param x int整型
     * @return int整型
     */
    public int reverse (int x) {
        // write code here
        String str = Math.abs(x) + "";
        if (x > Math.pow(2, 31) - 1 || x < Math.pow(-2, 31) || Integer.parseInt(str)<0) return 0;String val = "";
        for (int i = str.length() - 1; i >= 0; i--) {
            val += str.charAt(i);
        }
        int a=5;
        long result = Long.parseLong(val);
        result = x > 0 ? result : -result;
        return (int)result == result ? (int)result : 0;
    }
}

方法二,采用数学公式的方式。
每次都取余10表示最后一个值放在最前面。(该方法由于没有使用太多java内置函数,没有那么多坑)

import java.util.*;


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

相关文章:

  • Day14-尚品汇-个人中心二级路由搭建
  • 【第一阶段:java基础】第2章:java变量
  • 【Spring】一文带你吃透基于注解的DI技术
  • 跨域(cors和jsonp)
  • 手撕前端面试题【javascript~ 总成绩排名、子字符串频次统计、继承、判断斐波那契数组等】
  • Linux运维面试题总结—Linux基础、计算机网络基础
  • 【小程序websocket前后端交互】uniapp写微信小程序聊天功能功能,websocket交互功能,心跳重连【详细注释,复制即用】
  • 四线法与电桥
  • Linux文件属性与权限
  • 金融监管总局:力争实现全国普惠型小微企业贷款增速不低于各项贷款增速
  • 缅甸国防军继续延长临时停火期限至5月31日
  • 为什么有的人闻到烟味,会咳嗽、胸闷?别再伤害身边的人
  • 繁荣活跃!“五一”假期全国重点零售和餐饮企业销售额同比增长6.3%
  • 外交部就习近平主席将应邀对俄罗斯进行国事访问并出席纪念苏联伟大卫国战争胜利80周年庆典答问
  • 《开始推理吧3》:演员没包袱,推理更共情