函数序列

题目描述

Shinobu 很喜欢下面五个函数:

  1. f0(x) = -x
  2. f1(x) = x2
  3. f2(x) = √x
  4. f3(x) = log10 x
  5. 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;
}