leetcode算法-整数反转

题目描述:
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

我的解答:
package Simple;
import java.util.Scanner;
public class Practice2 {
    private int i = 1;
    // 默认为整数,即无符号
    private String sign = "";

    public static void main(String[] args) {
        Practice2 sol = new Practice2();
        sol.getNum();
    }

    private void getNum() {
        System.out.println("请输入要反转的整数:");
        //判断输入的整数是几位数
        Scanner input = new Scanner(System.in);
        //n为输入的整数
        int n = input.nextInt();
//        System.out.println(n);
        input.close();
        //首先判断是否越界
//        if (n < Integer.MIN_VALUE || n > Integer.MAX_VALUE)
//            System.out.println("输入的整数越界!");
        // 接着判断符号
        // 如果是负数,则先把符号去掉,把绝对值反转之后再加上负号
        if (n < 0)
            this.sign = "-";
        n = Math.abs(n);
        //求整数为几位数
        int m = n;
        while (m > 9) {
//            // m除以10表示位数多了一位
            m = m / 10;
            this.i++;
//            //如果m/10仍然>9,则继续进入while循环
        }
        if (n < 10)
            System.out.println("输入的整数为一位数,反转后的数为:" + this.sign + n);
        else {
            System.out.println("输入的整数为" + i + "位数");
            //首先要注意是有符号整数,负数反转之后仍然为负数
            //其次要注意范围是32位,如果溢出就返回0
            //反转后的整数
            int res = this.reverse(n);
            System.out.println("反转后的整数为:" + this.sign + res);
        }

    }

    private int reverse(int x) {
        int p, w, t, s, m = x, sum = 0;
        //这里我们对反转方法只考虑正整数,且n>10
        //有几位数就输出几次
        for (int k = this.i; k >= 1; k--) {
            t = 1;
            s = 1;
            //第k位数就除以10的k-1次方
            for (int j = 1; j <= k - 1; j++) {
                t *= 10;
            }
            //得到第k位数的值
            m = m / t;
            w = this.i - k;
            // l=Math.pow(10,w);
            for (int f = 1; f <= w; f++) {
                s *= 10;
            }
            p = m * s;
            sum += p;
            //将首位去掉,对剩下的数重复输出
            m = x % t;
        }
        return sum;
    }
}

 


自我分析:

自己写得很复杂,过程比较麻烦,在别人的评论中看到一个不错的回答,学习经验:
更优解答:
package Simple;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Test t=new Test();
        Scanner input = new Scanner(System.in);
        System.out.println("请输入要反转的整数:");
        //n为输入的整数
        int n = input.nextInt();
        input.close();
        int res=t.reverse(n);
        System.out.println(res);
    }
    public int reverse(int x) {
        long rs = 0;
        while(x != 0){
            rs = rs*10+x%10;
            x /= 10;
        }
        return (rs<Integer.MIN_VALUE || rs>Integer.MAX_VALUE) ? 0:(int)rs;
    }
}

 





posted @ 2019-10-31 19:36  遍唱阳春  阅读(285)  评论(0编辑  收藏  举报