Problem Description
今天的电脑课,老师给大家普及了一些计算机知识。
硬盘制造商有不同的容量衡量标准。 通常制造商认为1“kilo”等于1000,但操作系统会认为是1024。 因此,当你购买了一个100MB的硬盘,电脑却只显示大约有95MB,这缺失了大约5MB。 对于硬盘的大小,有多种单位描述。 它们分别是byte, kilobyte, megabyte, gigabyte, terabyte, petabyte, exabyte, zetabyte 和yottabyte。 每一个都相当于前一个的 1“kilo”倍。 例如,1 gigabyte 就是 1 “kilo” megabytes.
给定制造商所代表的硬盘的大小,你决定试着计算“缺失部分”的百分比。
Input
第一行给定T,表示有T组数据。
每组数据形如:数字[单位] ,其中"数字"在范围 [1, 1000]内 , 同时"单位"为以下单位之一:“B”, “KB”, “MB”, “GB”, “TB”, “PB”, “EB”, “ZB”, “YB” , 单位大小是递增的。
Output
对于第x组数据,输出:“Case #x: y”, 其中y是缺失部分的百分比,具体输出格式可参考样例。
Sample Input
2
100[MB]
1[B]
Sample Output
Case #1: 4.63%
Case #2: 0.00%
Hint
第一组数据中: 制造商认为:100 MB=1e5 KB=1e8 B, 操作系统认为:100 MB=100* 1024 KB=10010241024 B, 因此缺失部分=1-(1e8)/(10010241024)=4.63%
题目分析没啥好分析的,直接疯狂复制粘贴修改代码片段即可。
当然,封装成函数也可以。反正一坨if少不了
AC Code#include
using namespace std;
int main(){
int T, tt = 0; cin >> T;
while (T--){
int x;
char c[10];
cin >> x >> c;
int n = strlen(c);
double num = 1000.0 / 1024;
if (n == 3){
printf("Case #%d: 0.00%%\n", ++tt);
continue;
}
if (c[1] == 'K'){
printf("Case #%d: %.2lf%%\n", ++tt, 100 * (1 - num));
continue;
}
if (c[1] == 'M'){
printf("Case #%d: %.2lf%%\n", ++tt, 100 * (1 - num * num));
continue;
}
if (c[1] == 'G'){
printf("Case #%d: %.2lf%%\n", ++tt, 100 * (1 - num * num * num));
continue;
}
if (c[1] == 'T'){
printf("Case #%d: %.2lf%%\n", ++tt, 100 * (1 - num * num * num * num));
continue;
}
if (c[1] == 'P'){
printf("Case #%d: %.2lf%%\n", ++tt, 100 * (1 - num * num * num * num * num));
continue;
}
if (c[1] == 'E'){
printf("Case #%d: %.2lf%%\n", ++tt, 100 * (1 - num * num * num * num * num * num));
continue;
}
if (c[1] == 'Z'){
printf("Case #%d: %.2lf%%\n", ++tt, 100 * (1 - num * num * num * num * num * num * num));
continue;
}
if (c[1] == 'Y'){
printf("Case #%d: %.2lf%%\n", ++tt, 100 * (1 - num * num * num * num * num * num * num * num));
continue;
}
}
return 0;
}