Description:
你是否也注意到,买来的存储设备,如 U盘、移动硬盘等,可用空间总是比卖家标榜的要小。买一只 4G U盘,但实际可用空间却只有 3.5G!
我们知道:
1TB = 1024GB
1GB = 1024MB
1MB = 1024KB
1KB = 1024B
计算机使用的是二进制,1024 = 210;而我们平时生活里使用十进制,厂家为了方便,使用近似值 1000 来代替 1024,即:
1TB = 1000GB
1GB = 1000MB
1MB = 1000KB
1KB = 1000B
所以买到手的 U盘空间都会缩水。比如,我们期望的 4G 空间有 4 * 1024 * 1024 * 1024 = 4294967296 字节,但实际只有 4 * 1000 * 1000 * 1000 = 4000000000 字节,整整少了 294967296 字节!
我希望你能帮助我开发一款程序:只要输入 U盘的大小,程序能告诉我实际少了多少字节。比如输入“4GB”,程序会输出“294967296”
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 绰绰有余。
#include<iostream>
#include<string>
using namespace std;//K 2^10
//M 2^20
//G 2^30
//T 2^40int main() {long long x;string s;while (cin >> x >> s && x) {long long n = 0;//f**kif (s == "KB")n = x * 1024 - x * 1000;if (s == "MB")n = x * 1024 * 1024 - x * 1000 * 1000;if (s == "GB") n = x * 1024 * 1024 * 1024 - x * 1000 * 1000 * 1000;if (s == "TB") n = x * 1024 * 1024 * 1024 * 1024 - x * 1000 * 1000 * 1000 * 1000;cout << n << endl;}
}
为什么要把n置零啊?参考了别人的ac代码,怎么都找不到原因,改来改去,都改成别人的代码了。每一次输入都会重新初始化n这个变量,为什么非要给它赋0?