天天看点

ACM常用技巧Java(输入输出、排序、大数、格式转换、进制运算)

文章目录

借鉴爽文1

List转数组toArray方法

上机时间

package com;

import java.math.BigInteger;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.*;

public class acm {
    public static void main(String[] args) {
        acm acm = new acm();
        //acm.format();
        //acm.bigIntegerTest();
        //acm.jinzhi();
        //acm.sortArray();
        acm.input();
    }
    //ACM输入流
    public void input(){
        System.out.println(
                "        格式1:Scanner sc = new Scanner (new BufferedInputStream(System.in));\n" +
                "        格式2:Scanner sc = new Scanner (System.in);\n" +
                "        在读入数据量大的情况下,格式1的速度会快些。\n" +
                "\n" +
                "       读一个整数: int n = sc.nextInt(); 相当于 scanf(\"%d\", &n); 或 cin >> n; \n" +
                "       读一个字符串:String s = sc.next(); 相当于 scanf(\"%s\", s); 或 cin >> s; \n" +
                "       读一个浮点数:double t = sc.nextDouble(); 相当于 scanf(\"%lf\", &t); 或 cin >> t; \n" +
                "       读一整行: String s = sc.nextLine(); 相当于 gets(s); 或 cin.getline(...); \n" +
                "\n" +
                "       判断是否有下一个输入可以用sc.hasNext()或sc.hasNextInt()或sc.hasNextDouble()或sc.hasNextLine()");
/*      格式1:Scanner sc = new Scanner (new BufferedInputStream(System.in));
        格式2:Scanner sc = new Scanner (System.in);
        在读入数据量大的情况下,格式1的速度会快些。

       读一个整数: int n = sc.nextInt(); 相当于 scanf("%d", &n); 或 cin >> n; 
       读一个字符串:String s = sc.next(); 相当于 scanf("%s", s); 或 cin >> s; 
       读一个浮点数:double t = sc.nextDouble(); 相当于 scanf("%lf", &t); 或 cin >> t; 
       读一整行: String s = sc.nextLine(); 相当于 gets(s); 或 cin.getline(...); 

       判断是否有下一个输入可以用sc.hasNext()或sc.hasNextInt()或sc.hasNextDouble()或sc.hasNextLine()
*/

//        Scanner sc = new Scanner(System.in);
//        int n = sc.nextInt();
//        for (int i = 0; i < n; i++) {
//            String op = sc.next();
//            int a = sc.nextInt();
//            int b = sc.nextInt();
//            if (op.charAt(0) == '+') {
//                System.out.println(a + b);
//            } else if (op.charAt(0) == '-') {
//                System.out.println(a - b);
//            } else if (op.charAt(0) == '*') {
//                System.out.println(a * b);
//            } else if (op.charAt(0) == '/') {
//                if (a % b == 0)
//                    System.out.println(a / b);
//                else
//                    System.out.format("%.2f", (a / (1.0 * b))).println();
//            }
//        }

        //String n2 = sc.next();
        String n2 ="21852";

        //String刷成char[]
        char[] charnum = n2.toCharArray();
        System.out.println(Arrays.toString(charnum));

        //String刷成int
        int i = Integer.parseInt(n2);
        System.out.println(i);

//       char[] 刷成int[]
        int[] ints = new int[charnum.length];
        int index =0;
        for(char num:charnum){
            ints[index++] = (int)num-48;
        }
        System.out.println(Arrays.toString(ints));


    }

    //数组排序
    public void sortArray(){
        int[] arr = {1,3,8,5,2,7};

        System.out.println("array默认升序_________________________________________________");
        //默认升序,从小到大
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));

        System.out.println("List默认升序_______________________________________________");
        List<Integer> arrList = new ArrayList<>();
        arrList.add(1);arrList.add(4);arrList.add(2);arrList.add(78);arrList.add(23);
        //集合工具类Collections,对集合进行升序排序
        Collections.sort(arrList);
        System.out.println(Arrays.toString(arrList.toArray()));

        System.out.println("array降序_______________________________________________");

        Integer[] arr2 = new Integer[]{1,2,3,8,5};
        //lamada表达式只支持包装类array重写
        //Arrays.sort(arr2,((o1, o2) -> o2-o1));
        //与上述效果一致,支支持包装类元素的array逆序
        Arrays.sort(arr2,Collections.reverseOrder());
        System.out.println(Arrays.toString(arr2));

        System.out.println("List降序__________________________________________________");
        Collections.sort(arrList,Collections.reverseOrder());
        System.out.println(Arrays.toString(arrList.toArray()));


    }

    //大数运算
    public void bigIntegerTest(){
        int a = 1111111111, b = 222222222, c = 333333333;
        BigInteger x, y, z, ans;
        x = BigInteger.valueOf(a);
        y = BigInteger.valueOf(b);
        z = BigInteger.valueOf(c);
        ans = x.add(y); System.out.println(ans);
        ans = z.divide(y); System.out.println(ans);
        ans = x.mod(z); System.out.println(ans);
        if (ans.compareTo(x) == 0) System.out.println("1");
    }
    //进制转换
    public void jinzhi(){
        Integer num = new Integer(154);
        System.out.println("num:"+num);

        //  把 num 当做 10 进制的数转成 base 进制的 st(base <= 35).
        String st=Integer.toString(num,2);
        System.out.println("10Integer_to_x(2)String:"+st);

        //  把 st 当做 base 进制,转成 10 进制的 int(parseInt 有两个参数 , 第一个为要转的字符串 , 第二个为说明是什么进制 ).  
        int res = Integer.parseInt(st,2);
        System.out.println("x(2)String_to_10Int:"+res);

        // st 是字符串, base 是 st 的进制 .
        BigInteger m=new BigInteger(st,2);
        System.out.println("x(2)String_to_10Integer:"+m);

    }

    //double格式化
    public void format(){
        NumberFormat formatter = new DecimalFormat("000000");
        String s = formatter.format(-1234.567); // -001235
        System.out.println(s);
        formatter = new DecimalFormat("##");
        s = formatter.format(-1234.567); // -1235
        System.out.println(s);
        s = formatter.format(0); // 0
        System.out.println(s);
        formatter = new DecimalFormat("##00");
        s = formatter.format(0); // 00
        System.out.println(s);

        formatter = new DecimalFormat(".00");
        s = formatter.format(-.567); // -.57
        System.out.println(s);
        formatter = new DecimalFormat("0.00");
        s = formatter.format(-.567); // -0.57
        System.out.println(s);
        formatter = new DecimalFormat("#.#");
        s = formatter.format(-1234.567); // -1234.6
        System.out.println(s);
        formatter = new DecimalFormat("#.######");
        s = formatter.format(-1234.567); // -1234.567
        System.out.println(s);
        formatter = new DecimalFormat(".######");
        s = formatter.format(-1234.567); // -1234.567
        System.out.println(s);
        formatter = new DecimalFormat("#.000000");
        s = formatter.format(-1234.567); // -1234.567000
        System.out.println(s);

        formatter = new DecimalFormat("#,###,###");
        s = formatter.format(-1234.567); // -1,235
        System.out.println(s);
        s = formatter.format(-1234567.890); // -1,234,568
        System.out.println(s);

        // The ; symbol is used to specify an alternate pattern for negative
        // values
        formatter = new DecimalFormat("#;(#) ");
        s = formatter.format(-1234.567); // (1235)
        System.out.println(s);

        // The ' symbol is used to quote literal symbols
        formatter = new DecimalFormat(" '# '# ");
        s = formatter.format(-1234.567); // -#1235
        System.out.println(s);
        formatter = new DecimalFormat(" 'abc '# ");
        s = formatter.format(-1234.567); // - abc 1235
        System.out.println(s);

        formatter = new DecimalFormat("#.##%");
        s = formatter.format(-12.5678987);
        System.out.println(s);

    }
}



           

继续阅读