HDOJ 1296:Polynomial Problem 关键在于处理字符串

来源:互联网 发布:linux 服务器宕机日志 编辑:程序博客网 时间:2024/05/02 10:48

    这道题的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;}



原创粉丝点击