您的位置:首页 > 其它

HDU_4788_Hard Disk Drive(打表)(13成都现场H题)

2014-02-07 15:21 295 查看
题型:简单题

题意

计算机储存单位有如下几种:

“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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: