Hard Disk Drive HDU - 4788

Posted Jozky86

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hard Disk Drive HDU - 4788相关的知识,希望对你有一定的参考价值。

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;
}

以上是关于Hard Disk Drive HDU - 4788的主要内容,如果未能解决你的问题,请参考以下文章

[HDOJ4788]Hard Disk Drive(水题)

请问:电脑设置中FIOPPY、LS120、hard Disk 、 CDROM 、 Zip、 USB-FDD 、 LAN 和IDE分别是啥意思?

请问:电脑设置中FIOPPY、LS120、hard Disk 、 CDROM 、 Zip、 USB-FDD 、 LAN 和IDE分别是啥意思?

Ubuntu remount hard drive

VirtualBox 导入vdi时报错 Cannot register the hard disk because a hard disk '' with UUID already e

Programmatically mount a Microsoft Virtual Hard Drive (VHD)