如何计算多项式(x^2^2^2^2 x^2^2^2)
how to calculate polynomial (x^2^2^2^2+x^2^2^2)
我想计算(x^2^2^2^2 x^2^2^2)结果应该为[x^256 x^16] ..但是我我无法完全做到这一点。我还编写了一个在上半场工作的代码(在' '之前),但在其他一半之前,它无法做到...
#include<iostream>
#include<string>
#include <algorithm>
#include<sstream>
using namespace std;
int main()
{
string a;
cin >> a;
string s1 = "^";
string::size_type foud;
foud = a.find(s1);
int i = foud;
int flag = 0;
i++;
while (foud != std::string::npos)
{
flag = 0;
cout << i <<"I"<< endl;
while (flag != 1 && i < a.length())
{
if (a[i] == '(' || a[i] == '+' || a[i] == '-' || a[i] == ')')
{
flag++;
cout << "terminator" << endl;
}
else if (a[i] == '^')
{
/*int j = (int)(a[i - 1]);
j = j - 48;
int k = (int)(a[i + 1]);
k = k - 48;
i = k + 1;
int power =0;
power = pow(j, k);
;*/
int j = i;
int k = i;
k--;
j++;
string bcknumber;
while (a[k] != '^' && a[k] != '(' && a[k] != '+' && a[k] != '-' && a[k] != ')')
{
bcknumber = bcknumber + a[k];
k--;
}
cout << bcknumber << endl;
reverse(bcknumber.begin(), bcknumber.end());
cout << bcknumber << endl;
int BK;
BK = stoi(bcknumber);
int FD;
string frdnum;
while (a[j] != '^'&&a[j] != ' ' && a[j] != '(' && a[j] != '+' && a[j] != '-' && a[j] != ')')
{
frdnum = frdnum + a[j];
j++;
}
FD = stoi(frdnum);
int resil = pow(BK, FD);
frdnum.clear();
stringstream s;
string res;
s << resil;
res = s.str();
if (i == 15)
{
a.replace(14, 15, res);
}
else
{
a.replace(i - bcknumber.length(), i + frdnum.length(), res);
}
i--;
bcknumber.clear();
}
else
i++;
}
foud = a.find("^", foud + 1);
i = foud;
i++;
}
cout << a << endl;
system("pause");
}
这不是一个微不足道的问题。您想构建一个Infix计算器(A B)。前缀计算器( A B)或后缀计算器(A B )更简单,因为根本没有歧义。infix计算器可以具有很多,具体取决于您希望用户拥有的自由度。
在您暴露的问题中,人们很想说:嗯,如果第二个操作数旁边有一个操作员,那么我必须累积最后的结果并使用该操作以及下一个操作。但是,有一些问题之类的问题不会用这种方法来处理。
我将开始创建一个前缀计算器。这要容易得多:
calculate():
opr = match operator
op1 = match operand
if op1 is operator:
back
op1 = calculate
op2 = match operand
if op2 is operator:
back
op2 = calculate
return calc(opr, op1, op2)
一旦您掌握了它,就有可能从infix计算器开始。
在最后一个算法中要做的一件事是将其更改以避免递归。
这是一个很好的锻炼,享受它。希望这会有所帮助。
这闻起来像作业/作业,所以我不会提供代码...
正如我所看到的那样,您只需字符串解析器即可替换电源零件。我假设您仍然不了解功率数学或错误地编写/解释字符串的表示形式。例如:
x^2^2^2^2 =
(((x^2)^2)^2)^2 =
(((x.x)^2)^2)^2 =
((x.x).(x.x))^2)^2 =
((x.x.x.x))^2)^2 =
((x.x.x.x).(x.x.x.x))^2 =
(x.x.x.x.x.x.x.x)^2 =
(x.x.x.x.x.x.x.x).(x.x.x.x.x.x.x.x) =
(x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x) =
x^16
而不是您的x^256
。您无法添加必须根据数学操作的顺序放置它们的parentses,否则将导致的方程式与输入字符串匹配!!!如果您为解析器定义了不同的解析规则,则在标准数学中,您需要在问题中定义它们。
现在如何处理:
阅读字符串
我将从恒定的硬编码字符串开始,而不是一遍又一遍地编程/debugin时一直键入它(就像许多学生一样...我看到每个构建中键入
5x5
矩阵的人几次这是疯狂的)只有程序工作时,只需使用
cin
读数...就像您已经做过的检测字符串的哪一部分是电源指数
-
exponent=1
- 搜索字符串查看第一个
^
,请记住起始位置i0
如果找不到goto #4 。 现在取决于以下内容:
- 如果数字乘以
exponent
。 - 如果
^
跳过它,然后将其转到#2 - 如果都不停止
粗糙的
如果您应该支持父母,那么它将要复杂得多,您需要解码整个事情,这不是微不足道的,您也应该在问题中提及。
- 如果数字乘以
-
用计算字符串(如果可计算)
替换原始指数字符串因此,计算的字符串将为
"^"<<exponent
或"^"+exponent
取决于您使用的字符串算术类型..输出字符串
使用
cout
或您已经做的任何事情
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 递归函数计算序列中的平方和(并输出过程)
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的字符计数代码计算错误.为什么
- 在计算中使用二的幂有多有利可图
- 如何计算文件中的"columns"数?
- 计算排序向量的向量中唯一值的计数
- 如何使用 std::累积在 C++ 中计算总和立方体
- 使用Qt C++计算类似Git的SHA1哈希
- OpenCV C++.快速计算混淆矩阵
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- C++如何计算用户输入的数字中的偶数位数
- 如何计算数据类型的范围,例如int
- 类似枚举的计算常量
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 仅使用 3 个变量 (C++) 计算 4 次多项式的值
- 如何计算多项式(x^2^2^2^2 x^2^2^2)
- 计算多项式ax 3 + bx2 + cx + d的程序,对于给定的a,b,c和d,使用最少的运算次数
- C++ 使用霍纳方法计算多项式的递归帮助
- 计算多项式的系数作为抽象类数