• 一元多项式


    过程

    1. #define _CRT_SECURE_NO_WARNINGS
    2. #include
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. using namespace std;
    9. int n;
    10. double cP(const vector<double>& a, double x)
    11. {
    12. double result = 0.0;
    13. for (int i = 0; i < n; i++)
    14. {
    15. double term = a[i] * pow(x, i);
    16. result += term;
    17. }
    18. return result;
    19. }
    20. int main()
    21. {
    22. double x;
    23. cin >> n;
    24. vector<double>a(n);
    25. for (int i = 0; i < n; i++)
    26. cin >> a[i];
    27. cin >> x;
    28. double P = cP(a, x);
    29. cout << P;
    30. return 0;
    31. }

    补充解析

    1. //详细解析
    2. #define _CRT_SECURE_NO_WARNINGS
    3. //使用 const vector& 的声明方式可以提供以下优点:
    4. //
    5. //避免不必要的数据复制:通过使用引用(& ),而不是直接传递一个副本,避免了在函数调用时复制整个系数向量的开销,提高了效率。
    6. //
    7. //确保数据的不可变性:使用 const 修饰符可以确保函数内部不会修改传递的系数向量,这有助于提高代码的可读性并预防潜在的错误。
    8. //
    9. //因此,在这个例子中,const vector& 是正确的参数声明方式,它既能提高性能,又能保证数据的不可变性。
    10. #include
    11. #include
    12. using namespace std;
    13. //for循环实现累加
    14. // 计算一元多项式的值 P(x)
    15. double calculatePolynomial(const vector<double>& coefficients, double x) {
    16. double result = 0.0;
    17. for (int i = 0; i < n; i++) {
    18. double term = coefficients[i] * pow(x, i);
    19. result += term;
    20. }
    21. return result;
    22. }
    23. int n;
    24. int main() {
    25. cout << "输入多项式的最高次数: ";
    26. cin >> n;
    27. vector<double> coefficients(n + 1);
    28. for (int i = 0; i <= n; i++) {
    29. cout << "输入系数 a[" << i << "]: ";
    30. cin >> coefficients[i];
    31. }
    32. double x;
    33. cout << "输入要计算的值 x: ";
    34. cin >> x;
    35. double result = calculatePolynomial(coefficients, x);
    36. cout << "P(" << x << ") = " << result << endl;
    37. return 0;
    38. }

    改进算法

    避免重复计算多次不必要的x
     

    1. //详细解析
    2. #define _CRT_SECURE_NO_WARNINGS
    3. //使用 const vector& 的声明方式可以提供以下优点:
    4. //
    5. //避免不必要的数据复制:通过使用引用(& ),而不是直接传递一个副本,避免了在函数调用时复制整个系数向量的开销,提高了效率。
    6. //
    7. //确保数据的不可变性:使用 const 修饰符可以确保函数内部不会修改传递的系数向量,这有助于提高代码的可读性并预防潜在的错误。
    8. //
    9. //因此,在这个例子中,const vector& 是正确的参数声明方式,它既能提高性能,又能保证数据的不可变性。
    10. #include
    11. #include
    12. using namespace std;
    13. //for循环实现累加
    14. // 计算一元多项式的值 P(x)
    15. double calculatePolynomial(const vector<double>& coefficients, double x) {
    16. double result = 0.0;
    17. result += a[0] * 1//先把i=0的情况算入result中
    18. double tmp = x;//x^0
    19. for (int i = 1; i < n; i++)
    20. {
    21. double term = a[i] * tmp;
    22. result += term;
    23. tmp *= x;//自身一直自增
    24. }
    25. return result;
    26. //pow(x,i)可以优化,先求出i=0的结果,然后直接得出
    27. return result;
    28. }
    29. int n;
    30. int main() {
    31. cout << "输入多项式的最高次数: ";
    32. cin >> n;
    33. vector<double> coefficients(n + 1);
    34. for (int i = 0; i <= n; i++) {
    35. cout << "输入系数 a[" << i << "]: ";
    36. cin >> coefficients[i];
    37. }
    38. double x;
    39. cout << "输入要计算的值 x: ";
    40. cin >> x;
    41. double result = calculatePolynomial(coefficients, x);
    42. cout << "P(" << x << ") = " << result << endl;
    43. return 0;
    44. }

  • 相关阅读:
    QT5|C++|通过创建子线程方式实现进度条更新
    Unity3D 基于ECS的AI思考与怪物同步详解
    使用 NumPy 及其相关库(如 pandas、scikit-learn 等)时,由于 NumPy 的版本不兼容或者某些依赖库与 NumPy 的版本不匹配
    【MATLAB 入门手册】基本操作与矩阵输入
    MMAP日志框架进化之路
    力扣刷题第二十六天--二叉树
    【蓝桥·算法双周赛】蓝桥杯官方双周赛震撼来袭
    一、【React拓展】setState 的2种写法
    ELK收集多个docker容器日志
    okcc呼叫中心的订单管理时怎么样的
  • 原文地址:https://blog.csdn.net/ASBSIHD/article/details/132732481