Captain Hammer - Practice Round China New Grad Test 2014 - 精度控制

Captain Hammer

题意:简单的应用抛物线相关公式。难度:1星。

从文件中读取数据之后,应用简单的物理数学知识,可以得到结果,再将结果输出到文件。

需要注意:

1)C++的文件操作;

2)输出文件数据的小数保证10^-6位的绝对正确,则输出到10^-7位,PI的精度也需要很高:

#define PI 3.14159265359
		outputFile.setf(ios::fixed);
		outputFile << setprecision(7) << "Case #" << i + 1 << ": " << theta << endl;

3)可能由于double存储小数机制与int不一样,本应相等的两个数之比结果为1.000000000002(之类的),导致asin()返回值非预期,不得已将其直接转为1。此问题待求证!

题解代码:

/*
 *	Captain Hammer - Practice Round China New Grad Test 2014
 *
 *
 */

#include <iostream>
#include <fstream>
#include <iomanip>

using namespace std;

#define GRAVITY 9.8
#define PI 3.14159265359

int main()
{
	int T, V, D;
	double theta;

	ifstream inputFile;
	ofstream outputFile;

	inputFile.open("E:\\C++\\GCJ\\China New Grad Test 2014\\Practice Round\\Captain Hammer\\B-small-practice.in");
	outputFile.open("E:\\C++\\GCJ\\China New Grad Test 2014\\Practice Round\\Captain Hammer\\B-small-practice.out");

	inputFile >> T;

	for (int i = 0; i < T; i++)
	{
		inputFile >> V >> D;

		double tmp = (double)D * GRAVITY / (V * V);

		theta = tmp >= 1 ? 45 : 0.5 * asin(tmp) / PI * 180;

		cout.setf(ios::fixed);
		cout << setprecision(7) << "Case #" << i + 1 << ": " << theta << endl;

		outputFile.setf(ios::fixed);
		outputFile << setprecision(7) << "Case #" << i + 1 << ": " << theta << endl;
	}

	inputFile.close();
	outputFile.close();

	system("pause");
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值