poj 2295: A DP Problem

来源:互联网 发布:java 泛型编程 编辑:程序博客网 时间:2024/04/30 02:23

解题思路:

(1)字符串处理问题

(2)注意结果向下取整

#include<iostream>#include<cstring>#include<cstdlib>#include<iomanip>#include<cmath>using namespace std;int main(){int m;cin>>m;char exp[260];double num[300];double xnum[300];int p,q;while(m--){cin>>exp;char s[10];int k = 0;p = 0;q = 0;int sig = 1;//标记符号,1正数,-1负数int side = 1;//标记位置,1左侧,-1右侧 for(int i=0;i<=strlen(exp);i++){if(exp[i] == '+'){s[k] = '\0';num[p] = atoi(s) * sig * side;p++;k = 0;memset(s,0,sizeof(s));sig = 1; }else if(exp[i] == '-'){s[k] = '\0';num[p] = atoi(s) * sig * side;p++;k = 0;memset(s,0,sizeof(s));sig = -1;}else if(exp[i] == 'x'){s[k] = '\0';int c = atoi(s);if(strlen(s) == 0)c = 1;xnum[q] = c * sig * side;q++;memset(s,0,sizeof(s));k = 0;}else if(exp[i] == '='){s[k] = '\0';num[p] = atoi(s) * sig * side;p++;k = 0;memset(s,0,sizeof(s));sig = 1;side = -1;}else if(exp[i] == '\0'){s[k] = '\0';num[p] = atoi(s) * sig * side;p++;k = 0;memset(s,0,sizeof(s));}else{s[k] = exp[i];k++;}}double a1 = 0,a2 = 0; for(int i=0;i<p;i++){//cout<<num[i]<<endl;a1 += num[i];}for(int i=0;i<q;i++){//cout<<xnum[i]<<"x"<<endl;a2 += xnum[i];}//cout<<"a1 = "<<a1<<endl;//cout<<"a2 = "<<a2<<endl;if(a2 == 0){if(a1 == 0)cout<<"IDENTITY"<<endl;elsecout<<"IMPOSSIBLE"<<endl;}elsecout<<floor(-a1/a2)<<endl;}return 0;} 


0 0
原创粉丝点击