亲,你寄的 U盘不是 4G 的哟~

Time Limit
1s
Memory Limit
131072KB
Judge Program
Standard
Ratio(Solve/Submit)
28.03%(492/1755)
Description:

你是否也注意到,买来的存储设备,如 U盘、移动硬盘等,可用空间总是比卖家标榜的要小。买一只 4G U盘,但实际可用空间却只有 3.5G!

我们知道:

  1. 1TB = 1024GB
  2. 1GB = 1024MB
  3. 1MB = 1024KB
  4. 1KB = 1024B

计算机使用的是二进制,1024 = 210;而我们平时生活里使用十进制,厂家为了方便,使用近似值 1000 来代替 1024,即:

  1. 1TB = 1000GB
  2. 1GB = 1000MB
  3. 1MB = 1000KB
  4. 1KB = 1000B

所以买到手的 U盘空间都会缩水。比如,我们期望的 4G 空间有 4 * 1024 * 1024 * 1024 = 4294967296 字节,但实际只有 4 * 1000 * 1000 * 1000 = 4000000000 字节,整整少了 294967296 字节!

我希望你能帮助我开发一款程序:只要输入 U盘的大小,程序能告诉我实际少了多少字节。比如输入“4GB”,程序会输出“294967296”

Input:

1.输入数据会有多组。
2.每组数据占据一行。
3.每组数据由两部分组成:前面是一个整数 n(0 <= n < 1000),后面跟着单位(B、KB、MB、GB 或 TB)。数字和单位之间没有空格。
4.如果 n 等于 0,表示输入结束,程序退出。注意:这里没指明单位是什么,意味着输入“0B”、“0KB”、“0MB”、“0GB”和“0TB”都能退出程序。

Output:

1.对应输入,输出实际缩小的存储空间。
2.每组输出占一行。

Sample Input:
256MB
512MB
4GB
256GB
320GB
512GB
999TB
0MB
Sample Output:
12435456
24870912
294967296
18877906944
23597383680
37755813888
99412116148224
Hint:

C 语言里 unsigned long 型整数能保存的最大数是 232-1 = 4294967295,这个数比 4G 要小。你可能没注意到 double 类型是能精确保存 16 位数的,应付本题的 999TB 绰绰有余。

Source:

acm


Submit