蓝桥杯:P0703 反置数
一个整数的反置数指的是把该整数的每一位数字的顺序颠倒过来所得到的另一个整数。如果一个整数的末尾是以0结尾,那么在它的反置数当中,这些0就被省略掉了。比如说,1245的反置数5421,而1200的反置数是21。请编写一个程序,输入两个整数,然后计算这两个整数的反置数之和sum,然后再把sum的反置数打印出来。例如,如果用户输入:435和754,则输出结果为199。要求:由于在本题中需要多次去计算一个整数的反置数,因此必须把这部分代码抽象为一个函数的形式。
输入:
435 754
输出:
199
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int m = input.nextInt();
int n = input.nextInt();
StringBuffer stringBuffer = new StringBuffer();
int result=reversal(m, stringBuffer)+reversal(n, stringBuffer);
System.out.println(reversal(result, stringBuffer));
}
//反置函数
public static int reversal(int N,StringBuffer stringBuffer){
//清空StringBuffer的方法,错误:stringBuffer=null;
//正确:三种:stringBuffer=new StringBuffer();
// stringBuffer.delete(0, stringBuffer.length());
stringBuffer.setLength(0);
String[] str = String.valueOf(N).split("");
if (N==0){
stringBuffer.append(N);
}else if (N > 0) {//正数反转
alike(str);
for (int i = 0; i < str.length / 2; i++) {
String tem = str[i];
str[i] = str[str.length - i - 1];
str[str.length - i - 1] = tem;
}
} else {//负数反转,负号不参与交换
for (int i = 1; i < str.length / 2; i++) {
alike(str);
String tem = str[i];
str[i] = str[str.length-i];
str[str.length-i] = tem;
}
}
for (int j = 0; j < str.length; j++) {
stringBuffer.append(str[j]);
}
return Integer.parseInt(stringBuffer.toString());
}
//数组末尾为0的去掉
public static void alike(String[] str){
int k=str.length-1;
while ("0".equals(str[k])){
str[k]="";
k-=1;
}
}
}