本文共 1196 字,大约阅读时间需要 3 分钟。
JAVA算法:整数旋转(Rotate Integer)JAVA版本
给定一个整数,输出将其旋转后的结果。
解决这个问题需要注意思考几个特殊点:
1、给定的整数处理后超出整数的表示范围,溢出。 2、尾数有0的情况,例如:100,处理后的结果是什么? 3、程序中如何捕获异常。算法分析(思路)
通过对数字模十取余得到它的最低位。其实本题考查的是整数相加的溢出处理,检查溢出有这么几种办法:
两个正数数相加得到负数,或者两个负数相加得到正数,但某些编译器溢出或优化的方式不一样
对于正数,如果最大整数减去一个数小于另一个数,或者对于负数,最小整数减去一个数大于另一个数,则溢出。这是用减法来避免加法的溢出。 使用long来保存可能溢出的结果,再与最大/最小整数相比较算法设计
package com.bean.algorithm.basic;public class RotateInteger { public int reverse(int x) { long result = 0; int tmp = Math.abs(x); while(tmp>0){ result *= 10; result += tmp % 10; if(result > Integer.MAX_VALUE){ return 0; } tmp /= 10; } return (int)(x>=0?result:-result); } public static void main(String[] args) { // TODO Auto-generated method stub RotateInteger rotateInteger=new RotateInteger(); int x=-321; int ANSWER = rotateInteger.reverse(x); System.out.println("ANSWER = "+ANSWER); }}
程序运行结果:
ANSWER = -123
另外一种JAVA算法设计:
public int reverse(int x) { long sum = 0; while (x != 0) { sum = sum * 10; sum += x % 10; x = x / 10; } if (sum > Integer.MAX_VALUE || sum < Integer.MIN_VALUE) { return 0; } return (int) sum;}
程序运行结果相同。
转载地址:http://jitdi.baihongyu.com/