-
问题链接: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\n", x * (n + 1));
else
printf("%.2f\n", (quickpower(x, n+1) - 1.0) / (x - 1.0));
return 0;
}