函数序列
题目描述
Shinobu 很喜欢下面五个函数:
- f0(x) = -x
- f1(x) = x2
- f2(x) = √x
- f3(x) = log10 x
- f4(x) = sin x
于是她打算用这五个函数构成一系列函数,逐个作用到一个浮点数上,并计算出最后的结果。换而言之,对于给定的初始浮点数 x,以及一个由 0 ~ 4 中整数构成的数列 {ai}n,计算
fan(fan-1(...fa1(x)...))
的值。
关于输入
第一行为初始浮点数 x。
第二行为函数序列的元素个数 n。
第三行包括 n 个数 ai,即要作用的函数的编号。
关于输出
作用后的最终计算结果,保留小数点后 6 位数字。
核心技巧
- 使用
using
进行类型定义,将复杂类型简单化
参考答案
#include <iostream>
#include <cmath>
// 补全 funcs 的定义
using DoubleFunc = double(double);
double f0(double x) {
return -x;
}
double f1(double x) {
return x * x;
}
DoubleFunc* funcs[] = {f0, f1, std::sqrt, std::log10, std::sin};
int main() {
double src;
int n;
std::cin >> src >> n;
for (int i = 0; i < n; i++) {
int op;
std::cin >> op;
src = funcs[op](src);
}
std::cout << std::fixed << src << std::endl;
}