P2394 yyy loves Chemistry I

P2394 yyy loves Chemistry I

# yyy loves Chemistry I

## 题目背景

因为会吃回车,所以放到题目描述里了喵~

## 题目描述

[故事背景]

从前,有个人叫yyy,他特别喜欢化学,尤其是一些很危(zuo)险(si)的实验.

[题目背景]

这一天,他开始研究起了一个神奇又有趣的方程式

2Na + 2H2O ==== 2NaOH + H2↑

[问题描述]

现在yyy将一块质量为xg的钠投入很多的水中,然后开始收集氢气.

最终,我们知道,后来,这块钠在水中游动着消失了.而yyy很厉害,把氢气全收集起来了.

**已知每投入了23克的钠,就会生成1克的氢气.**

那么现在yyy收集了多少克氢气呢?

## 输入格式

一行,一个实数x,代表yyy将多少克钠投入了水中

输入文件行末一定**不会**有一只回车啦~

## 输出格式

一行,一个实数(四舍五入精确到8位小数),代表生成了多少克氢气

## 样例 #1

### 样例输入 #1

```
0.23
```

### 样例输出 #1

```
0.01000000
```

## 提示

[数据规模]

对于100%的数据,0<x<=1

[提示]

你想知道x有几位小数吗?才不给你呢>\_<

我只知道空间限制是4M,时间限制是0.1s,而且如果你把数字全读下来的话可能就MLE咯~

kkksc:没有数据范围怎么行!输入文件不超过5M!

出题人:怎么能这样!差评!我不好挖坑了!

【翻译】

输入一个死鬼特别长的实数x,输出x/23保留8位小数的值。

【AC代码】

#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iomanip>
#include<iostream>
#include<map>
#include<queue>
#include<string>
#include<vector>
using namespace std;
long double x;
signed main()
{
	scanf("%15Lf",&x);
	cout<<fixed<<setprecision(8)<<x/23;	
	return 0;
}

 

 吸取之前的教训,这回写代码之前我就做好了调整精度的准备 

给个关注吧

 【高级做法】

 

#include <iostream>
#include <cstdio>
using std::scanf;
using std::printf;
int x;
char c;
int len(int a) //返回数的长度
{
	if (a==0)
		return 1;
	int ans=0;
	while (a)
	{
		++ans;
		a/=10;
	}
	return ans;
}
int main()
{
    if ((c=getchar())=='1') //特判
    {
    	long double y=1;
		printf("%.8Lf", y/23);
    	return 0;
    }
    getchar();
    bool flg=false;
    for (int i=1; i<=9; ++i)
	{
		if (!flg)
			c=getchar();
		if (c>'9'||c<'0')
			x*=10, flg=true;
		else
			x=(x<<3)+(x<<1)+c-'0';
	}
	x=(x/23+5)/10; //四舍五入
	putchar('0');
	putchar('.');
	int length=len(x);
	for (int i=1; i<=8-len(x); ++i) //补上前导零
		putchar('0');
	printf("%d\n", x);
	return 0;
}

选自樱初音斗橡皮大佬蒟蒻奆佬(纠结地打出了奆佬)的TJ。

袁隆平:我这辈子最大的错事就是让樱初音斗橡皮中国人吃撑了没事干

——MC方块人

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值