Hard Disk Drive HDU - 4788
题意:
通常制造商认为1“kilo”等于1000,但操作系统会认为是1024。
因此,当你购买了一个100MB的硬盘,电脑却只显示大约有95MB,这缺失了大约5MB。
对于硬盘的大小,有多种单位描述。
它们分别是byte, kilobyte, megabyte, gigabyte, terabyte, petabyte, exabyte, zetabyte 和yottabyte。
每一个都相当于前一个的 1“kilo”倍。 例如,1 gigabyte 就是 1 “kilo” megabytes.
给定制造商所代表的硬盘的大小,你决定试着计算“缺失部分”的百分比。
题解:
题目很简单,每一次损失是w = 1000/1024,B,KB,MB依次都是w的0次幂,1次幂,2次幂…
这题最难的地方在于最后输出%,printf输出的话,要输出一个%,就是写两个%
printf("Case #%lld: %.2lf%%\n",++cas,(1.0-f)*100.0);
我也才知道,一直wa。。
代码:
#include <iostream>
#include <string>
#include <cstdio>
#include <cstring>
using namespace std;
#define ll long long
#define INF 0x3f3f3f3f
int main(){ll t;cin>>t;ll cas=0;while(t--){string s;cin>>s;double w=1000.0/1024.0;int pos=s.find("[");int p=0;if(s[pos+1]=='Y'){p=8;}else if(s[pos+1]=='Z')p=7;else if(s[pos+1]=='E')p=6;else if(s[pos+1]=='P')p=5;else if(s[pos+1]=='T')p=4;else if(s[pos+1]=='G')p=3;else if(s[pos+1]=='M')p=2;else if(s[pos+1]=='K')p=1;else if(s[pos+1]=='B')p=0;double f=1.0;for(int i=1;i<=p;i++){f=f*w;}printf("Case #%lld: %.2lf%%\n",++cas,(1.0-f)*100.0);}return 0;
}