• 一元多项式


    过程

    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. }

  • 相关阅读:
    无人值守的共享台球室:微信小程序实现自助服务
    Nvidia GPU 入门教程之 09 如何使用 Kaggle API 搜索和下载数据?
    elasticsearch官方学习文档
    初学Rabbit MQ
    操作DOM对象(重点)
    TV-SAM 新型零样本医学图像分割算法:GPT-4语言处理 + GLIP视觉理解 + SAM分割技术
    最小二乘法与极大似然估计
    SpringBoot大文件上传实现分片、断点续传
    Enterprise Architect15(EA) 工具栏,隐藏后显示快捷方式
    编译原理(gcc,makefile)
  • 原文地址:https://blog.csdn.net/ASBSIHD/article/details/132732481