牛客刷题笔记-编程初学者入门训练(简单篇1)

BC3-有容乃大

public class Main{
    public static void main(String[] args){
        System.out.println("The size of short is " + Short.SIZE / 8 + " bytes.");
        System.out.println("The size of int is " + Integer.SIZE / 8 + " bytes.");
        System.out.println("The size of long is " + Long.SIZE / 8 + " bytes.");
        System.out.println("The size of long long is " + Long.SIZE / 8 + " bytes.");
    }
}

XXX.SIZE:数据类型在内存中所占空间大小

BC7-缩短二进制

public class Main{
    public static void main(String[] args){
        int rem[] = new int[10];
        String r[] = new String[10];
        int num=1234;
        int len1=0,len2=0;
        int i;
        for(i=0;num/8>0;i++){
            rem[i]=num%8;
            num = num/8;
            len1++;
        }
        rem[len1]=num;
        System.out.print("0");
        for(i=len1;i>=0;i--){
            System.out.print(rem[i]);
        }
        System.out.print(" ");
        num=1234;
        for(i=0;num/16>0;i++){
            rem[i]=num%16;
            num = num/16;
            len2++;
        }
        rem[len2]=num;
        for(i=len2;i>=0;i--){
            if(rem[i]<10) r[i]=Integer.toString(rem[i]);
            else if(rem[i]==10) r[i]="A";
            else if(rem[i]==11) r[i]="B";
            else if(rem[i]==12) r[i]="C";
            else if(rem[i]==13) r[i]="D";
            else if(rem[i]==14) r[i]="E";
            else r[i]="F";
        }
        System.out.print("0X");
        for(i=len2;i>=0;i--){
            System.out.print(r[i]);
        }
    }
}

在不知道API的情况下直接用数学方法除8(16)取余,收获:整型数转字符串Integer.toString(num)或String.valueOf(num)

学习一下别人的代码:

答案一:利用 printf 实现进制转换

public class Main
{
    public static void main(String[] args)
    {
        System.out.printf("0"+"%o",1234);
        System.out.printf(" 0X"+"%X",1234);
    }
}

解析:

  • "%d"表示以十进制整数形式输出
  • "%o"表示以八进制形式输出
  • "%x"表示以十六进制输出
  • "%X"表示以十六进制输出,并且将字母(A、B、C、D、E、F)换成大写
  • "%e"表示以科学计数法输出浮点数
  • "%E"表示以科学计数法输出浮点数,而且将e大写
  • “%f"表示以十进制浮点数输出,在”%f"之间加上".n"表示输出时保留小数点后面n位

答案二:利用 Integer 实现进制转换

public class Main
{
  public static void main(String[] args)
  {
      int i=1234;
      System.out.println("0"+Integer.toOctalString(i)+" 0X"+Integer.toHexString(i).toUpperCase());
  }
}

解析:Integer类的方法

  • Integer.toBinaryString()可实现十进制转换成二进制
  • Integer.toOctalString()可实现十进制转换成八进制
  • Integer.toHexString()可实现十进制转换成十六进制
  • Integer.valueOf(s, radix)
    将第一个参数解释为用第二个参数指定的基数表示的有符号整数
    将 s 以 radix 进制的形式转换为十进制
  • toUpperCase表示转换为大写字母
  • toLowerCase表示转换为小写字母

答案三:利用 BigInteger 实现进制转换

import java.math.BigInteger;
public class Main
{
  public static void main(String[] args)
  {
      System.out.println("0" + change("1234",10,8) + " 0X" + change("1234",10,16));
  }
  /**
   * number   要转换的数   
   * from     原数的进制    
   * to       要转换成的进制
   */
  private static String change(String number, int from, int to)
  {
      String str = new BigInteger(number, from).toString(to);
      return str.toUpperCase();
  }
}

解析:

  • change(String number, int from, int to)
  • number 要转换的数
  • from 原数的进制
  • to 要转换成的进制

BC8-十六进制转十进制

public class Main{
    public static void main(String[] args){
        String hex = "ABCDEF";
        int s = Integer.parseInt(hex,16);
        System.out.printf("%15d",s);
    }
}

1.integer.parseInt(string s,int radix):

参数:
s - 包含要分析的整数表示形式的 String
radix - 分析 s 时使用的基数,省略了radix,则基数为10(进制)。
返回:
使用指定基数的字符串参数表示的整数。
抛出:
NumberFormatException - 如果 String 不包含可分析的 int

2.System.out.printf();可以实现对输出宽度的控制以及左右对齐

System.out.printf("%f",a);浮点数形式输出
System.out.printf("%+d",b);
输出的数带正负号
System.out.printf("%-3d",b);
左对齐输入(默认右对齐)
这个需要注意的是若为
System.out.printf("%-d",b);
则提示出错:java.util.MissingFormatWidthException,左对齐需要指定长度,否则无意义,下面语句带左对齐的输出同样需要指定长度,部分参考资料这里没有声明,会造成输出报错
System.out.printf("%+-6d",b);
带正负号输出且左对齐
System.out.printf("%+9.5d",b);
带正负号输出,且符号占用一个长度,9代表输出的长度,5代表小数点后的位数
System.out.printf("%s",s);
以字符串输出
System.out.printf("%d,%s,%f",b,s,a);
可以输出多个变量

BC9-printf的返回值

public class Main{
    public static void main(String[] args){
        System.out.println("Hello world!");
        System.out.println("Hello world!".length());
    }
}

所以printf的返回值就是打印字符串的长度

BC11-学生基本信息输入输出

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        String[] a = s.nextLine().split("[;,]");
        int id = Integer.parseInt(a[0]);
        double s1 = Double.parseDouble(a[1]);
        double s2 = Double.parseDouble(a[2]);
        double s3 = Double.parseDouble(a[3]);
        System.out.print("The each subject score of  No. " + id + " is " + String.format("%.2f", s1) + ", " + String.format("%.2f", s2) + ", " + String.format("%.2f", s3) + ".");
    }
}

split() 方法根据匹配给定的正则表达式来拆分字符串。

注意: . 、 $、 | 和 * 等转义字符,必须得加 \。

注意:多个分隔符,可以用 | 作为连字符。

语法:public String[] split(String regex, int limit)
参数:regex – 正则表达式分隔符。 limit – 分割的份数。

返回值:字符串数组。

举例:

        System.out.println("");
        System.out.println("- 分隔符设置分割份数返回值 :" );
        for (String retval: str.split("-", 2)){
            System.out.println(retval);
        }

输出结果:

       - 分隔符设置分割份数返回值 :
       Welcome
       to-Runoob

你可能感兴趣的:(牛客刷题笔记,java)