图解算法——整数倒置

这是一道比较简单的题目,写出来很容易,但是之所以我写这道题,主要是因为我从这道题中学到了一些新的知识点和用法。

1、题目描述

输入一个整数,将这个整数以字符串的形式逆序输出

程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001。

输入描述:

输入一个int整数

输出描述:

将这个整数以字符串的形式逆序输出。

2、示例

输入:1516000

输出: 0006151

3、解题思路

因为牛客上要求是自己写输入输出的,故,我采用其推荐的Scanner用法来输入。

思路一是:

定义输入变量sc,和返回字符串res (注意是stringBuffer类型的,方便拼接);

然后获取到输入的整数;

因为我们要倒置整数,故可以从整数的低位(个位)开始往高位(十,百,千,万等)读取,并放入res中,故可以利用求余和求商的算法。

那么什么时候取到最高位呢?当然是对该整数 n 求商是否为0来判断,获取低位用求余。

需要注意一点的是,在最后while条件不满足时,此时就剩下最高位了,但是由于是一位,对10求商后,为0,跳出循环,但是该位还未加入到res中,故需要手动再拼接一下,然后再输出。

代码如下:

import java.util.Scanner;

public class Main{
    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);
        StringBuffer res = new StringBuffer();
        while(sc.hasNextInt()){
            int a = sc.nextInt();
            while(a/10 != 0){
                res.append(a%10);
                a = a/10;
            }
            res.append(a);
            System.out.println(res);
        }
    }
}

以上是我的做法,也是比较一般的思路。

虽然通过了,但是击败率却较低。

 

思路二:

利用StringBuffer的反转功能(reverse()):

import java.util.Scanner;

public class Main{
    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        StringBuffer res = new StringBuffer(str);
        res.reverse();
        System.out.println(res);
    }
}

击败率略有增加:

 

 

 但是依然不过半。说明......还有更优的解法!

 我迫不及待地点开题解。

但是呢?我看了其他解法之后,我发现,我完全被系统提示给限制住了。

 

 

 那么究竟是什么解法呢?

原来是利用输入输出流,InputStream,一个字节一个字节地读取:

import java.io.IOException;
import java.io.InputStream;

public class Main {
    public static void main(String[] args) throws IOException {
        InputStream stream = System.in;
        int l;
        byte[] bytes = new byte[1024];
        while((l = stream.read(bytes))>0){
            String numStr = new String(bytes, 0, l - 1);
            char [] numChars = numStr.toCharArray();
            char [] numCharsConvert = new char[numChars.length];
            for(int i =0; i < numChars.length; i++){
                numCharsConvert[i] = numChars[numChars.length-1-i];
            }
            System.out.println(new String (numCharsConvert));
        }
    }
}

最后的for循环也可利用reverse()函数。

 

 

Over........

posted @ 2021-07-26 23:29  额是无名小卒儿  阅读(365)  评论(0编辑  收藏  举报