#LQ1359. 内存空间
内存空间
问题描述
小蓝最近总喜欢计算自己的代码中定义的变量占用了多少内存空间。
为了简化问题, 变量的类型只有以下三种:
int
: 整型变量, 一个 int
型变量占用 4 Byte
的内存空间。
long
: 长整型变量, 一个 long
型变量占用 8 Byte
的内存空间。
String
: 字符串变量, 占用空间和字符串长度有关, 设字符串长度为 , 则字符串占用 Byte
的内存空间, 如果字符串长度为 0
则占用 0 Byte
的内存 空间。
定义变量的语句只有两种形式, 第一种形式为:
;
定义了若干个 类型变量 并且用 初始化,
多个变量之间用 ,
分隔, 语句以 ;
结尾, 可能是 int
、long
或 String
。例如
;占用空间为 12 Byte
;
; 占用空间为 16 Byte
;
String s1="",s2="hello",s3="world";
占用空间为 10 Byte
。
第二种形式为:
type[] arr1=new type[size1], arr2=new type[size2]
;
定义了若干 类型的一维数组变量 且数组的大小为 多个变量之间用 ,
进行分隔, 语句以 ;
结尾, 只可能是 int
或 long
。例如
int[] a1=new int[10];
占用的内存空间为 40 Byte
;
long[] a1=new long [10],a2=new long [10];
占用的内存空间为 160 Byte
。
已知小蓝有 条定义变量的语句, 请你帮他统计下一共占用了多少内 存空间。结果的表示方式为: aGBbMBcKBdB, 其中 为统计的结果, GB
、MB
、KB
、B
为单位。优先用大的单位来表示。
1GB=1024MB,1MB=1024KB, 1KB=1024B
, 其中 B
表示 Byte
。如果 中的某几个数字为 0
, 那么不必输出这几个数字及其单位。题目保证一行中只有一句定义 变量的语句, 且每条语句都满足题干中描述的定义格式, 所有的变量名都是合法的且均不重复。题目中的数据很规整, 和上述给出的例子类似, 除了类型后面有一个空格, 以及定义数组时 new
后面的一个空格之外, 不会出现多余的空格。
输入格式
输入的第一行包含一个整数 , 表示有 句变量定义的语句。 接下来 行, 每行包含一句变量定义语句。
输出格式
输出一行包含一个字符串, 表示所有语句所占用空间的总大小。
1
long[] nums=new long[131072];
1MB
4
int a=0,b=0;
long x=0,y=0;
String s1="hello",s2="world";
long[] arr1=new long[100000],arr2=new long[100000];
1MB538KB546B
样例说明
样例 1 , 占用的空间为 , 换算过后正好是 , 其 它三个单位 、、 前面的数字都为 0 , 所以不用输出。
样例 2 , 占用的空间为 , 换算后是 1MB538KB546B
。
评测用例规模与约定
对于所有评测用例, , 每条变量定义语句的长度不会超过 1000
。所有的变量名称长度不会超过 10
, 且都由小写字母和数字组成。
对于整型变量, 初始化的值均是在其表示范围内的十进制整数, 初始化的值不会是变量。
对于 String
类型的变量, 初始化的内容长度不会超过 50
, 且内容仅包含小写字母和数字, 初始化的值不会是变量。
对于数组类型变量, 数组的长度为一个 整数, 范围为: , 数组的长度不会是变量。
条语句定义的变量所占的内 存空间总大小不会超过 1GB
, 且大于0B
。