HDOJ 1296:Polynomial Problem 关键在于处理字符串
2011-12-15 21:05
375 查看
这道题的URL:http://acm.hdu.edu.cn/showproblem.php?pid=1296
题目的意思是,给出一个多项式和自变量的值,求出多项式的值。
核心解题思路是每处理出多项式的一个项,便计算出该项的值,并加入最终结果中。但这道题目的边界条件不少,尤其是系数和指数都是默认的情况,处理起来需要些技巧。
这里给一个不好处理的边界条件:
input:
2
X
output:
2
下面是我的AC代码,和大家分享一下。
题目的意思是,给出一个多项式和自变量的值,求出多项式的值。
核心解题思路是每处理出多项式的一个项,便计算出该项的值,并加入最终结果中。但这道题目的边界条件不少,尤其是系数和指数都是默认的情况,处理起来需要些技巧。
这里给一个不好处理的边界条件:
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; }
相关文章推荐
- HDOJ 1106 排序 (字符串处理)
- HDOJ/HDU 1073 Online Judge(字符串处理~)
- 36th成都区域赛网络赛 hdoj4039 The Social Network(建图+字符串处理)
- 字符串处理 HDOJ Quicksum
- HDOJ1228 ( A + B ) 【字符串处理】
- ACM--26进制加法--HDOJ 2100--Lovekey--大数--字符串处理
- HDOJ3787(A+B)(字符串处理)
- hdoj 2203 亲和串(字符串处理问题(strstr函数的巧用))
- hdoj1039简单题、字符串处理
- HDOJ 1004 字符串处理(字符串统计)
- 36th成都区域赛网络赛 hdoj4039 The Social Network(建图+字符串处理)
- HDOJ 字符串处理简单题合集
- hdoj1020Encoding(字符串处理,水)
- HDOJ/HDU 1039 Easier Done Than Said?(字符串处理~)
- HDOJ 题目1073 Online Judge(字符串处理)
- HDOJ/HDU 1039 Easier Done Than Said?(字符串处理~)
- hdoj1075 What Are You Talking About(STL map处理字符串)
- hdoj 3849 By Recognizing These Guys, We Find Social Networks Useful【双连通分量求桥&&输出桥&&字符串处理】
- HDOJ/HDU 1982 Kaitou Kid - The Phantom Thief (1)(字符串处理)
- HDOJ 1039 Easier Done Than Said? 简单的字符串处理