你是否也注意到,买来的存储设备,如 U盘、移动硬盘等,可用空间总是比卖家标榜的要小。买一只 4G U盘,但实际可用空间却只有 3.5G!
我们知道:
计算机使用的是二进制,1024 = 210;而我们平时生活里使用十进制,厂家为了方便,使用近似值 1000 来代替 1024,即:
所以买到手的 U盘空间都会缩水。比如,我们期望的 4G 空间有 4 * 1024 * 1024 * 1024 = 4294967296 字节,但实际只有 4 * 1000 * 1000 * 1000 = 4000000000 字节,整整少了 294967296 字节!
我希望你能帮助我开发一款程序:只要输入 U盘的大小,程序能告诉我实际少了多少字节。比如输入“4GB”,程序会输出“294967296”
1.输入数据会有多组。
2.每组数据占据一行。
3.每组数据由两部分组成:前面是一个整数 n(0 <= n < 1000),后面跟着单位(B、KB、MB、GB 或 TB)。数字和单位之间没有空格。
4.如果 n 等于 0,表示输入结束,程序退出。注意:这里没指明单位是什么,意味着输入“0B”、“0KB”、“0MB”、“0GB”和“0TB”都能退出程序。
1.对应输入,输出实际缩小的存储空间。
2.每组输出占一行。
256MB 512MB 4GB 256GB 320GB 512GB 999TB 0MB
12435456 24870912 294967296 18877906944 23597383680 37755813888 99412116148224
C 语言里 unsigned long 型整数能保存的最大数是 232-1 = 4294967295,这个数比 4G 要小。你可能没注意到 double 类型是能精确保存 16 位数的,应付本题的 999TB 绰绰有余。