本题使用 cin.peek() 可以大幅降低难度,该函数观测输入中下一个字符,但指针并不后移。
#include <iostream>
#include <string>
#include <cctype>
#include <algorithm>
using namespace std;
int main()
{
int x;
int a, n; //系数,指数
string s; //多项式
while (cin >> x)
{
cin.get(); //读取第一行输入后的换行符
__int64 ans = 0; //多项式结果
int op; //正负号
while (cin.peek() != '\n')
{
a = 0;
n = 0;
op = 1; //默认为加号
if (cin.peek() == '+') //加号
{
cin.get();
op = 1;
}
else if (cin.peek() == '-') //减号
{
cin.get();
op = -1;
}
if (isdigit(cin.peek())) //数字
{
cin >> a;
}
else //默认系数为1
a = 1;
if (cin.peek() == 'X')
{
cin.get();
if (cin.peek() == '^') //指数符号
{
cin.get();
cin >> n;
}
else //默认指数为1
n = 1;
}
ans += op * a * pow(x, n);
}
cout << ans << endl;
}
return 0;
}
继续加油。