求硬盘厂家标注的容量跟实际容量的差距。代码如下:
#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
using namespace std;
double B[]={1,1000,1e6,1e9,1e12,1e15,1e18,1e21,1e24};
double po(int pos){
double p=1;
for(int i=0;i<pos;++i){
p=p*pos;
}
return p;
}
int main(){
// freopen("data.txt","r",stdin);
int T;
scanf("%d",&T);
int kase=0;
while(T--){
char s[15];
scanf("%s",s);
int pos=0;
int num=0;
for(int i=strlen(s);i>=0;--i){
if(s[i]>='0'||s[i]<='9'){
num=num+(s[i]-'0')*po(pos);
pos++;
}
}
char tmp=s[strlen(s)-3];
int rec;
if(tmp=='['){
rec=0;
}
else if(tmp=='K')rec=1;
else if(tmp=='M')rec=2;
else if(tmp=='G')rec=3;
else if(tmp=='T')rec=4;
else if(tmp=='P')rec=5;
else if(tmp=='E')rec=6;
else if(tmp=='Z')rec=7;
else if(tmp=='Y')rec=8;
int times=10*rec;
double p=1;
for(int i=0;i<times;++i){p*=2;}
double ans=1-(B[rec]/p);
ans*=100;
// cout<<"tmp="<<tmp<<endl;
printf("Case #%d: %.2lf%%\n",++kase,ans);
}
return 0;
}