- 问题链接:POJ NOI0105-36 计算多项式的值。
-
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
假定多项式的形式为xn+xn-1+…+x2+x+1,请计算给定单精度浮点数x和正整数n值的情况下这个多项式的值。
- 输入
- 输入仅一行,包括x和n,用单个空格隔开。x在float范围内,n <= 1000000。
- 输出
- 输出一个实数,即多项式的值,精确到小数点后两位。保证最终结果在float范围内。
- 样例输入
-
2.0 4
- 样例输出
-
31.00
问题分析
等比数列求和问题,需要考虑特殊情况。
循环计算那是浮云,正解应该是根据等比数列求和的通项公式,采用快速幂计算实现,才能快速计算。
程序说明
(略)
参考链接:(略)
AC的C++语言程序:
#include <iostream> #include <cstdio> using namespace std; // 快速幂函数 float quickpower(float a, int n) { float res = 1.0; while(n) { if(n & 1L) res *= a; a *= a; n >>= 1; } return res; } int main() { float x; int n; cin >> x >> n; if(x == 1.0) printf("%.2f ", x * (n + 1)); else printf("%.2f ", (quickpower(x, n+1) - 1.0) / (x - 1.0)); return 0; }