POJ_3299

//412k  0ms

#include <cstdio>
#include <cmath>

#define HUM(d, t) (6.11 * exp(5417.7530 * ((1 / 273.16) - (1 / (d + 273.16)))) - 10.0) * 0.5555 + t
#define DEW(h, t) (1 / ((log(((h - t) / 0.5555 + 10.0) / 6.11) / 5417.7530) * (-1) + (1 / 273.16)) - 273.16)
#define TEP(d, h) (h - ((6.11 * exp(5417.7530 * ((1 / 273.16) - (1 / (d + 273.16))))) - 10.0) * 0.5555)

int main() {
  float t, d, h;
  float n[2];
  char c[2];
  while (scanf("%c %f %c %f", c, n, c + 1, n + 1) == 4) {
    t = d = h = 101; 
    for (int i = 0; i < 2; ++i) {
      if (c[i] == 'D') d = n[i];
      if (c[i] == 'T') t = n[i];
      if (c[i] == 'H') h = n[i];
    }
    if (t == 101) t = TEP(d, h);
    if (d == 101) d = DEW(h, t);
    if (h == 101) h = HUM(d, t);
    printf("T %0.1f D %0.1f H %0.1f\n", t, d, h);
    scanf("\n");
  }
  return 0;
}


notes:

1. pow(), log(), log10(), exp()函数的使用

2. 使用题中给定的e = 2.718281828,可以pow(e, x); log(x) / log(e);

3. 使用inline函数和macro的memory一致, 说明也是简单替换, 重要的是在inline中可以调用函数。

4. scanf double需要%lf,printf double %f就行, scanf("\n")能确保读入一个\n;

5. 隐式类型转换会按操作符优先级和结合性进行,有时候会有坑。

6. float: +/- 3.4e +/- 38 (7);    double +/- 1.7e +/- 308(15)


optimize:

转一段代码:

//Memory   Time 
//240K      0MS 

#include<iostream>
#include<math.h>
#include<string>
#include<iomanip>
using namespace std;
int main(void)
{
	char alpha;
	double t,d,h;
	int i;
	for(;;)
	{
		t=d=h=200;    //三个参数的范围默认都是在-100 ~ 100
		for(i=0;i<2;i++)
		{
			cin>>alpha;
			if(alpha=='E')
				return 0;
			else if(alpha=='T')
			    cin>>t;
			else if(alpha=='D')
				cin>>d;
			else if(alpha=='H')
				cin>>h;
		}
		if(h==200)
			h=t+0.5555*(6.11*exp(5417.7530*(1/273.16-1/(d+273.16)))-10);
		else if(t==200)
			t=h-0.5555*(6.11*exp(5417.7530*(1/273.16-1/(d+273.16)))-10);
		else if(d==200)
			d=1/((1/273.16)-((log((((h-t)/0.5555)+10.0)/6.11))/5417.7530))-273.16;
		cout<<setprecision(1)<<fixed<<"T "<<t<<" D "<<d<<" H "<<h<<endl;
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值