CQU 牛奶硬盘

Time Limit: 1000 MS Memory Limit: 131072 K

Description

信息时代里,牧场中奶牛也经常玩电脑,最近需要进行设备升级,农夫约翰买了一堆硬盘回来给奶牛们升级。
给了一个100MB的硬盘,结果奶牛们打开计算机,操作系统却说这个硬盘的大小是95MB。这5MB消失了。
硬盘的制造商认为”一千” 是1000,但是操作系统认为”一千”是1024.
有几个描述硬盘大小的单位,他们是byte, kilobyte, megabyte, gigabyte, terabyte, petabyte, exabyte, zetabyte and yottabyte。
每一个都是等于前一个的”一千”倍。举个例子 1 gigabyte 是 “一千” megabytes,比如制造商认为 1 gigabyte 是 1000* 1 megabytes. 操作系统认为 1 gigabyte 是 1024* 1 megabytes.
现在你知道一个由制造商代表的硬盘的大小(也就是制造商认为的硬盘的大小),你想计算百分比的”丢失的部分”。
单位分别有“B”, “KB”, “MB”, “GB”, “TB”, “PB”, “EB”, “ZB”, “YB”

Input

第一行为组数T
对于每组数据:
一行字符串,表示买来时显示的空间大小 (具体见样例)

Output

共T行
每行输出一个保留两位小数的实数,表示丢失的百分比(具体见样例)

Sample Input

2
100[MB]
1[B]

Sample Output

Case #1: 4.63%
Case #2: 0.00%

Hint:
第一个样例中,制造商认为100MB = 10^5 KB = 10^8 B,但操作系统认为 100MB = 100 * 2^10 KB = 100 * 2^20 B.所以 1 - (10^8) / (100* 2^20) = 4.63% 丢失了。

题意:如上。

分析:

根据公式 你会发现答案跟读入的数字并没有什么关系,可以上下约掉。
只和读入的B MB GB 这些字符是什么有关系。
你不可能直接算(10^3)^n 和1024^n 再相除吧
2^80 已经超过了2^64 存不下
显然是算出(1000/1024)^n 这里0≤n≤8 = =
所以答案只有9种,,
因为不知道T有多少组,所以我映射的map直接输出的(好像并没什么卵用 就当复习map 的用法好了

这是生活中常见的一个问题。。高中老师曾经说过这个问题,其实有时候我也在想商家这么算 我们到底损失了多少= =
这题为什么会存在呢。。。
大概是怕我这样的菜鸡无题可A吧qwq。。。。

//  Created by ZYD in 2015.
//  Copyright (c) 2015 ZYD. All rights reserved.
//

#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <climits>
#include <string>
#include <vector>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
using namespace std;
#define Size 100000
#define ll long long
#define mk make_pair
#define pb push_back
#define mem(array) memset(array,0,sizeof(array))
typedef pair<int,int> P;
int T,cas=0,a;
char ch[3];
map<char,double> mp; 
int main()
{
    freopen("in.txt","r",stdin);
    scanf("%d",&T);
    mp['B']=0;
    mp['K']=2.34;
    mp['M']=4.63;
    mp['G']=6.87;
    mp['T']=9.05;
    mp['P']=11.18;
    mp['E']=13.26;
    mp['Z']=15.30;
    mp['Y']=17.28;
    while(T--){
        scanf("%d[%s]\n",&a,ch);
        printf("Case #%d: %.2lf%%\n",++cas,mp[ch[0]]);
    }
    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值