OJ刷题——字符逆转
题目描述
Birdfly是一位优秀的acmer,他自幼都数学有着浓烈的兴趣。作为一名集训队员,总爱思考一些新奇的问题,寻求不同的解题方法。
Birdfly一直坚信freshmen的潜力是无穷的!因为你们是ZZULI ACM的未来!ACM的题目并不是那么简单,但这一题so easy!^_^
一天晚上,birdfly躺在床上毫无睡意……他想,任意给你一个整数,这个数可能很大(最长不超过100位),你能求出它的逆转数吗?
逆转数定义如下:
1.一个末尾没有0的整数,它的逆转数就是各位数字逆序输出;
2.一个负数的逆转数仍是负数;
3.一个末尾有0的整数,它的逆转数如同下例:reverse (1200) = 2100。
看着birdfly难以入睡,我只好求助于聪明的你编程实现这个问题,相信你一定能帮上忙的!
输入
输入数组有多组, 每组测试实例包含一个大数且占一行。
输出
对每组测试实例,输出它的逆转数。每组占一行。
样例输入
0
54
-8989
-54600
100000
样例输出
0
45
-9898
-64500
100000
附上代码:
import java.util.Scanner; public class Main{ public static void main(String[] args) { // TODO Auto-generated method stub Scanner scan = new Scanner(System.in); while(scan.hasNext()) { String str = scan.nextLine(); int len = str.length(); StringBuilder sb = new StringBuilder(); if(str.charAt(0)=='-') { if(str.charAt(len-1)=='0') { int indexZero = 0; for(int i = len-1;i>0;i--) { if(str.charAt(i)!='0') { indexZero = i; break; } } sb.append(str.substring(1, indexZero+1)); sb.reverse(); sb.append(str.substring(indexZero+1, len)); }else { sb.append(str.substring(1, len)); sb.reverse(); } System.out.println("-"+sb.toString()); }else { if(str.charAt(len-1)=='0') { int indexZero = 0; for(int i = len-1;i>0;i--) { if(str.charAt(i)!='0') { indexZero = i; break; } } sb.append(str.substring(0, indexZero+1)); sb.reverse(); sb.append(str.substring(indexZero+1, len)); }else { sb.append(str); sb.reverse(); } System.out.println(sb.toString()); } } } }