培养信心练手题,POJ3299具体描述如下:
这题唯一难受的地方就是拿着h和t计算d的公式,我也是上网查了一下才发现可以直接调用cmath中的log()进行计算……浪费了不少时间,具体代码如下:
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{
char ch1, ch2;
double num1 = 0, num2 = 0, t = 0, d = 0, h = 0;
while (cin >> ch1)
{
if (ch1 == 'E')
break;
cin >> num1 >> ch2 >> num2;
if ((ch1 == 'T' && ch2 == 'D') || (ch1 == 'D' && ch2 == 'T'))
{
if (ch1 == 'T' && ch2 == 'D')
{
t = num1;
d = num2;
}
else
{
d = num1;
t = num2;
}
h = t + 0.5555 * (6.11 * exp(5417.7530 * (1 / 273.16 - 1 / (d + 273.16))) - 10);
}
else if ((ch1 == 'T' && ch2 == 'H') || (ch1 == 'H' && ch2 == 'T'))
{
if (ch1 == 'T' && ch2 == 'H')
{
t = num1;
h = num2;
}
else
{
h = num1;
t = num2;
}
d = 1 / ((1 / 273.16) - ((log((((h - t) / 0.5555) + 10.0) / 6.11)) / 5417.7530)) - 273.16;
}
else
{
if (ch1 == 'H' && ch2 == 'D')
{
h = num1;
d = num2;
}
else
{
d = num1;
h = num2;
}
t = h - 0.5555 * (6.11 * exp(5417.7530 * (1 / 273.16 - 1 / (d + 273.16))) - 10);
}
cout << "T " << fixed << setprecision(1) << t << " D " << d << " H " << h << endl;
}
return 0;
}