这是一个基本C++计算器的“我”版本,它需要一个单行输入(如1+1)来计算结果。我学这门语言已经两个月了。我没有假装发明了这段代码,但是我没有花时间去搜索这个变化。
这些职能包括:
1 + 1 = 2输入程序:1+11 - 1 = 0输入:1-11 * 1 = 1输入:1*11 / 1 = 1程序输入:1/12 ^ 2 = 4输入:2^2#include <iostream>
#include <string>
using namespace std;
class Math_Functions
{
private:
double result;
public:
double addition(double, double);
double subtraction(double, double);
double multiplication(double, double);
double division(double, double);
double exponentiation(double, double);
} math;
double Math_Functions::addition(double a, double b)
{
result = a + b;
return result;
}
double Math_Functions::subtraction(double a, double b)
{
result = a - b;
return result;
}
double Math_Functions::multiplication(double a, double b)
{
result = a * b;
return result;
}
double Math_Functions::division(double a, double b)
{
result = a / b;
return result;
}
double Math_Functions::exponentiation(double a, double b)
{
result = 1;
for (int i = 0; i < b; i++)
{
result *= a;
}
return result;
}
int main()
{
double a, b;
string function;
bool loop = 1;
while(loop)
{
system("CLS");
cin >> a;
function = getchar();
cin >> b;
switch(function[0])
{
case '+' : cout << math.addition(a, b); break;
case '-': cout << math.subtraction(a, b); break;
case '*': cout << math.multiplication(a, b); break;
case '/': cout << math.division(a, b); break;
case '^': cout << math.exponentiation(a, b); break;
}
cout << endl << "Press Any Key to Continue . . . ";
cin.sync();
cin.ignore();
}
return 0;
}发布于 2015-01-19 21:25:12
如果要执行除法,必须首先检查0作为给定的除数。为了防止这一点,最好是警告用户,并确保他们在继续之前输入一个有效的数字。
对于指数化,如果b为0,则可以立即返回1,从而获得“快捷方式”。没有必要尝试计算,因为任何提高到0的幂都是1。你也应该以某种方式处理负能量。如果用户输入b的这样一个值,代码就会中断。这个循环不能处理所有这些可能的值。
发布于 2015-01-20 11:49:43
对于指数化,可以将b定义为double。在这种情况下,代码通常是不正确的,因为您使用一个简单的整数循环来执行幂运算。它只对非负整数指数有效。如果b是一个很大的数字,也可能需要很长的时间。使用
return pow(a,b);允许任意的实数。该函数在<cmath>中。
如果你真的想实现正整数指数,你也没有使用最合理的解决方案。循环执行b乘法,如果通过平方进行幂运算,则可以将其减少为log2(b)乘法(基本上是b中的非零位数)。
http://en.wikipedia.org/wiki/Exponentiation_通过_平方
https://codereview.stackexchange.com/questions/78031
复制相似问题