题目描述:
给出一个 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;
}
}
												

leetcode算法小题(2)的更多相关文章

  1. leetcode算法小题(3)

    问题描述: 判断一个数是否为回文数 class Solution {      public boolean isPalindrome(int x) {           if(x<0)    ...

  2. leetcode算法小题(1)

    题目描述: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数 ...

  3. LeetCode算法扫题系列19

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9104677.html LeetCode算法第19题(难度:中等) 题目:给定一个链表,删 ...

  4. LeetCode算法扫题系列83

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9104582.html LeetCode算法第83题(难度:简单) 题目:给定一个排序链表 ...

  5. leetcode算法刷题(五)——动态规划(三)

    今天的题目不是leetcode上面的.只是觉得动态规划还是不算很熟练,就接着找了点DP的题练练 最长递增子序列的长度 题目的意思:传入一个数组,要求出它的最长递增子序列的长度.例如:如在序列1,-1, ...

  6. leetcode 算法刷题(一)

    今天开始刷Leetcode上面的算法题.我会更新我刷题过程中提交的代码(成功和不成功的都有)和比较好的解法 第二题 Add Two Numbers 题目的意思:输入两个链表,这两个链表都是倒序的数字, ...

  7. leetcode算法刷题(四)——动态规划(二)

    又到了晚上,动态规划,开刷! 第121题 Best Time to Buy and Sell Stock 题目的意思:给予一个数组price,表示特定股票在某天的股价,里面第i个数表示第i天的价格.只 ...

  8. leetcode算法刷题(三)

    今天在刷了几道简单的动态规划后,又看了看string方面的题 第五题 Longest Palindromic Substring 题目的意思:求一个字符串的最长回文子串 分析:开始,我的想法是,现在字 ...

  9. leetcode算法刷题(二)——动态规划(一)

    上次刷了五六道题,都是关于string处理的,这次想换个知识点刷一下,然后再回头刷string的题,当做复习.. 这几天主要会选择动态规划的题目,因为以前从没刷过这方面的东西,很多东西都不是很懂..就 ...

随机推荐

  1. Player的跟踪狂 -- Camera

    P.S.很多游戏里的Player都会设置的被跟踪,是人性的扭曲,还是XXX,正在解密. 第三人称视角 camera紧跟player背后(角度随player改变) using System.Collec ...

  2. IT架构师技术知识图谱

    互联网上“最全的技术图谱”,记录下.来源:http://developer.51cto.com/art/201708/548757.htm 1 1.1 架构师图谱 1.2 Java架构师图谱 1.3 ...

  3. eclipse与hadoop集成,运行wordCount1

    搭好了hadoop集群之后,就该使用它了 第一步:下载hadoop eclipse的插件,将它放到eclipse\plugins的目录下,然后重启eclipse,点击windows->show ...

  4. .net core 3.0 Signalr - 01 基础篇

    因为将signalr作为单独的站点,此处需要建立两个项目,一个专门用于signalr作为推送项目,一个客户端(实际的业务项目) ## 基础知识速览 ### Clients对象属性 | 属性 | 描述 ...

  5. locate,find

    locate:非实时查找,模糊匹配,查找是根据全系统文件数据库进行的,可以使用updatedb命令来手动生成数据库 find:实时查找,精确匹配,支持众多查找标准,遍历指定目录中的所有文件完成查找,速 ...

  6. vultr恢复快照后更改密码(CentOs7)

    vultr恢复快照之后发现Xshell连不上了,仔细想想应该是之前换服务器的时候恢复快照导致密码更改了, 但是我已经把之前的服务器删了,没记住密码,这就很难受 只好改密码了 首先去官网 打开终端: 最 ...

  7. [Note] Visual Studio Team Service 中的项目 转到 Git

    Git-tf是微软发布的一个Git工具集的补充,用来让开发人员使用git命令与TFS交互,当然现在VSTS已经直接支持git了,现在讲讲以前用了VSTS的老项目如何转到git,保留所有的change ...

  8. HTML基础知识(块级标签,行内标签,行内块标签)

    块级元素:独占一行,对宽高的属性值生效:如果不给宽度,块级元素就默认为浏览器的宽度,即就是100%宽: 行内元素:可以多个标签存在一行,对宽高属性值不生效,完全靠内容撑开宽高! 其中还有一种结合两种模 ...

  9. 从单片机到操作系统⑦——深入了解FreeRTOS的延时机制

    >没研究过操作系统的源码都不算学过操作系统 # FreeRTOS 时间管理 时间管理包括两个方面:系统节拍以及任务延时管理. ## 系统节拍: 在前面的文章也讲得很多,想要系统正常运行,那么时钟 ...

  10. Spring Boot (十四): 响应式编程以及 Spring Boot Webflux 快速入门

    1. 什么是响应式编程 在计算机中,响应式编程或反应式编程(英语:Reactive programming)是一种面向数据流和变化传播的编程范式.这意味着可以在编程语言中很方便地表达静态或动态的数据流 ...