1261: 单位转换(Java)
WUSTOJ 1261: 单位转换
参考资料
Description
BobLee最近在复习考研,在复习计算机组成原理的时候,遇到了一个问题。就是在计算机存储里面的单位转换。我们都知道1MB=1024KB,1KB=1024B,1B=8bit,他在做题的时候经常会遇到格式各样的,比如多少MB,KB,B什么的,但是都要转换为bit,题目做的太多他都迷茫了,现在需要你通过程序来帮他解决这个问题。
Input
输入为多行未化简的数据,如xMB,xKB,xB,xbit,(1<=x<=50)
Output
输出为换算过后的数据,ybit
Sample Input
1MB
1KB
1B
1bit
Sample Output
8388608bit
8192bit
8bit
1bit
代码
/**
* 用时:263ms
* @author PengHao
* @version 1.0
* @date 2019年4月12日 下午6:13:18
*/
import java.util.Scanner;
public class Main {
private Scanner sc;
private int x;
private String unit; // 读取输入
public Main() {
sc = new Scanner(System.in);
while(sc.hasNext()) {
unit = sc.next(); // 读取输入
// 将非数据字段清空后,剩下的数字字段转成int型
x = Integer.parseInt(unit.replaceAll("\\D+", ""));
unit = unit.replaceAll("\\d+", ""); // 单位
switch(unit) {
case "MB":
x *= 8388608;
break;
case "KB":
x *= 8192;
break;
case "B":
x *= 8;
break;
default:
}
System.out.println(x + "bit");
}
sc.close();
}
public static void main(String[] args) {
new Main();
}
}
代码扩展(读取输入)
Java中不能用如下方法读取数字和字符串(输入格式同Sample Input):
/**
* @author wowpH
*/
import java.util.Scanner;
public class Main {
private Scanner sc;
private int x;
private String unit;
public Main() {
sc = new Scanner(System.in);
x = sc.nextInt();
unit = sc.next();
sc.close();
}
public static void main(String[] args) {
new Main();
}
}
因为中间没有空格,是无法分辨的。这里用的方法是先读取为字符串,再转成数字和单位。例如本题:输入1MB
,下面代码的第17行将会得到"1"
,而第18行将会得到"MB"
。
/**
* @author wowpH
*/
import java.util.Scanner;
public class Main {
private Scanner sc;
private int x;
private String all;
private String number;
private String unit;
public Main() {
sc = new Scanner(System.in);
all = sc.next();
number = all.replaceAll("\\D+", ""); // 将非数字字符删除,剩下的都是数字字符(0-9)
unit = all.replaceAll("\\d+", ""); // 将数字字符删除,剩下的都是非数字字符
x = Integer.parseInt(number); // 转成int型
sc.close();
}
public static void main(String[] args) {
new Main();
}
}
当然还有不少其他方法,这里不一一讨论,在此选取最简单的粗略介绍。