// 使用霍纳法则计算多项式的值 doublehorner(const std::vector<double>& coefficients, double x){ double result = coefficients.back(); for (int i = coefficients.size() - 2; i >= 0; --i) { result = result * x + coefficients[i]; } return result; }
// 从左至右二进制幂法计算 a 的 n 次方 doublepowerLeftToRight(double a, const std::vector<int>& binary_n){ if (binary_n.empty()) { return1; }
double result = a; for (size_t i = 1; i < binary_n.size(); ++i) { result = result * result; if (binary_n[i] == 1) { result = result * a; } } return result; }
intmain(){ double a = 2; // 假设 n 的二进制展开式为 1010(对应十进制的 10) std::vector<int> binary_n = {1, 0, 1, 0};
double result = powerLeftToRight(a, binary_n); std::cout << a << " 的 n 次方是: " << result << std::endl; return0; }
// 计算 a 的 n 次方的函数 doublepower(double a, int n){ double result = 1; double current_power = a; while (n > 0) { if (n % 2 == 1) { result *= current_power; } current_power *= current_power; n /= 2; } return result; }
intmain(){ double a = 2; int n = 10; double result = power(a, n); std::cout << a << " 的 " << n << " 次方是: " << result << std::endl; return0; }