题目描述
给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。
输入格式
一个整数 N
输出格式
一个整数,表示反转后的新数。
输入输出样例
输入
123
输出
321
输入
-380
输出
-83
说明/提示
数据范围
−1,000,000,000≤N≤1,000,000,000。
noip2011普及组第一题
题解:
第一种思路:按照正常思路,分正数,负数和0三种情况分别计算。
import java.util.Scanner;
public class P1307NOIP2011普及组数字反转 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
String s=in.nextLine();
int n=s.length(),sum=0; //sum代表反转后0的个数
StringBuilder s1=new StringBuilder(s);
if (s1.charAt(0)=='-'){ //负数的情况
StringBuilder s2=new StringBuilder(s1.substring(1, n)); //先扔掉负号
StringBuilder s3=s2.reverse(); //反转
for (int i=0;i<s3.length();i++) {
if (Integer.parseInt(s3.charAt(i)+"")==0) sum++; //记数,0的个数
else break;
}
System.out.println("-"+s3.substring(sum,s3.length())); //输出
}
//同上
else if (Integer.parseInt(s1.charAt(0)+"")>=1&&Integer.parseInt(s1.charAt(0)+"")<=10) {
StringBuilder s3=s1.reverse();
for (int i=0;i<s3.length();i++) {
if (Integer.parseInt(s3.charAt(i)+"")==0) sum++;
else break;
}
System.out.println(s3.substring(sum,s3.length()));
}
else System.out.println(s); //输出0
}
}
第二种题解:后来发现Integer.parseInt()可以自动去除0,就可以利用其直接解题。
import java.util.Scanner;
public class P1307NOIP2011普及组数字反转 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
String s=in.nextLine();
StringBuilder s1=new StringBuilder(s);
s1.reverse();
if(s1.charAt(s1.length()-1)=='-'){
// 删除负号并且在头插入负号
s1.delete(s1.length()-1, s1.length());
s1.insert(0, '-');
}
System.out.println(Integer.parseInt(s1.toString()));
}
}