电商网站商品中心设计方案,北京人才招聘网站,做金融行业网站,网架公司招聘安装队伍一、题目要求:
给定一个整数#xff0c;请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式#xff0c;即除非给定的原数为零#xff0c;否则反转后得到的新数的最高位数字不应为零 二、题目分析代码演示#xff1a; 该程序的主要功能是接收一个整数输入请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式即除非给定的原数为零否则反转后得到的新数的最高位数字不应为零 二、题目分析代码演示 该程序的主要功能是接收一个整数输入并将其各个位上的数字进行反转生成一个新的整数。例如输入123输出321输入-380输出-83。
import java.util.Scanner;import static java.lang.Integer.valueOf;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int num sc.nextInt();if (num 0){StringBuilder sb new StringBuilder();sb.append(num);StringBuilder sb1 sb.reverse();String sb2 sb1.toString();int num1 valueOf(sb2);System.out.println(num1);}else {String str num ;String str1 str.substring(1,str.length());StringBuilder str2 new StringBuilder();str2.append(str1);StringBuilder str3 str2.reverse();String str4 str3.toString();int m Integer.valueOf(str4);m -m;System.out.println(m);}}}
说明 处理负数的情况中有两点需要注意
1. String str num ; 将负数num转换为字符串str。例如-456转换为-456。 为什么要这样用 1. 将整数转换为字符串 在Java中直接对整数进行反转操作并不直观。因此通常的做法是将整数转换为字符串然后对字符串进行反转最后再将反转后的字符串转换回整数。 num 是一种简便的方法将整数 num 转换为对应的字符串表示。例如-123 会被转换为字符串 -123。 2. 方便截取数字部分 对于负数字符串表示以 - 开头。为了反转数字部分需要去掉这个负号只反转数字。使用 substring(1, str.length()) 可以轻松实现这一点得到 123。 这种做法的优缺点 优点 **简单直观**对于初学者来说这种方法易于理解和实现。 **快速实现**无需额外的库函数或复杂的逻辑即可实现数字反转。 缺点 **效率较低**字符串操作在Java中相对较慢尤其是对于大数或频繁的操作时。 **可读性差**num 这种写法不够明确可能会让阅读代码的人感到困惑。 **潜在的错误风险**如果 num 为 0num 会得到 0这在某些情况下可能需要额外处理。 2. String str1 str.substring(1, str.length()); 使用substring方法从索引1开始截取字符串去掉负号。例如-456变为456。 三、优化 虽然上述代码能够实现功能但有一些可以优化的地方
1. 处理负数的简化 可以统一处理正数和负数无需分开判断。例如先记录符号再处理绝对值部分。
2. 防止溢出 在将反转后的字符串转换为整数时可能会发生溢出例如反转Integer.MAX_VALUE。可以在转换前进行范围检查。
3. 使用更简洁的方法 可以利用数学运算来反转数字避免字符串操作提高效率。
public static void main(String[] args) {Scanner sc new Scanner(System.in);int num sc.nextInt();int reversed reverseInteger(num);System.out.println(reversed);
}public static int reverseInteger(int x) {int reversed 0;while (x ! 0) {int pop x % 10;x / 10;// 检查是否会溢出if (reversed Integer.MAX_VALUE/10 || (reversed Integer.MAX_VALUE / 10 pop 7)) return 0;if (reversed Integer.MIN_VALUE/10 || (reversed Integer.MIN_VALUE / 10 pop -8)) return 0;reversed reversed * 10 pop;}return reversed;
} 说明 1. 统一处理正负数 通过取模运算x % 10可以同时处理正数和负数。 2. 防止溢出 在每次更新reversed之前检查是否会导致整数溢出。如果会则返回0。 3. 数学运算反转数字 通过不断取出最后一位数字并构建反转后的数字避免了字符串操作提高了效率。