这道题的URL:http://acm.hdu.edu.cn/showproblem.php?pid=1296
题目的意思是,给出一个多项式和自变量的值,求出多项式的值。
核心解题思路是每处理出多项式的一个项,便计算出该项的值,并加入最终结果中。但这道题目的边界条件不少,尤其是系数和指数都是默认的情况,处理起来需要些技巧。
这里给一个不好处理的边界条件:
input:
2
X
output:
2
下面是我的AC代码,和大家分享一下。
#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
//高效求幂的运算方法
int power(int a, int n)
{
int r = 1;
int t = a;
for(; n; n >>= 1)
{
if(n & 1) r *= t;
t *= t;
}
return r;
}
int main()
{
char exp[10000];
int x, a, n, r;
bool positive; //标志当前处理的数是整数还是负数
bool isCoefficient; //标志当前处理的是系数还是指数
while(cin >> x)
{
cin >> exp;
positive = true;
isCoefficient = true;
a = n = 0;
r = 0;
int len = strlen(exp);
//系数默认为1的情况
if(exp[0] == 'X')
{
a = 1;
isCoefficient = false;
}
else a = 0;
for(int i=0; i<=len; i++)
{
if(exp[i] <= '9' && exp[i] >= '0')
{
if(isCoefficient)
{
a = a * 10 + exp[i] - '0';
}
else
{
n = n * 10 + exp[i] - '0';
}
}
else if(exp[i] == 'X')
{
//指数为1的情况,即默认情况
if(exp[i+1] == '-' || exp[i+1] == '+' || exp[i+1] == '\0')
{
n = 1;
isCoefficient = true;
}
}
else if(exp[i] == '-' || exp[i] == '+') //可以求解前面出现的一个完整的项了
{
if(!positive) a = -a;
if(exp[i] == '-') positive = false;
else positive = true;
r = r + a * power(x, n);
a = n = 0;
isCoefficient = true;
if(exp[i+1] == 'X') a = 1; //系数默认为1的情况
}
else if(exp[i] == '^')
{
isCoefficient = false;
}
else //'\0'
{
if(!positive) a = -a;
r = r + a * power(x, n);
a = n = 0;
}
}
printf("%d\n", r);
}
system("pause");
return 0;
}