题型:简单题
题意:
计算机储存单位有如下几种:
“B”, “KB”, “MB”, “GB”, “TB”, “PB”, “EB”, “ZB”, “YB”。
在计算机中这些单位相邻之间为2^10的换算关系,若按现实中类比1km=10m的换算关系,即定义1KB=10^3B并依此类推。
现给出一个值即其单位,问按照10^3关系换算,硬盘容量丢失了多少。
分析:
设xB,则显然丢失比重为0;
设xKB,则x*10^3/x*2^10=1000/1024;
设xMB,则x*10^6/x*2^20=(1000/1024)^2;
......
可以看出,问题的答案与x没有关系,只需根据单位来算(1000/1024)的多少次方即可。
先预处理出所需要的答案的表:
#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
using namespace std;
double fun(double a){
return a*0.9765625;
}
int main(){
double a=1.00000;
for(int i=1;i<=8;i++){
a=fun(a);
printf("%d----%.5lf\n",i,1-a);
}
}
然后直接求即可:
#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
using namespace std;
char unit[10];
int main(){
int t,n,time=1;
scanf("%d",&t);
while(t--){
scanf("%d%s",&n,unit);
printf("Case #%d: ",time);
time++;
if(strcmp(unit,"[B]")==0) printf("0.00%%\n");
else if(strcmp(unit,"[KB]")==0) printf("2.34%%\n");
else if(strcmp(unit,"[MB]")==0) printf("4.63%%\n");
else if(strcmp(unit,"[GB]")==0) printf("6.87%%\n");
else if(strcmp(unit,"[TB]")==0) printf("9.05%%\n");
else if(strcmp(unit,"[PB]")==0) printf("11.18%%\n");
else if(strcmp(unit,"[EB]")==0) printf("13.26%%\n");
else if(strcmp(unit,"[ZB]")==0) printf("15.30%%\n");
else printf("17.28%%\n");
}
return 0;
}