首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >输入简单计算器

输入简单计算器
EN

Code Review用户
提问于 2015-01-19 20:57:41
回答 2查看 2.9K关注 0票数 11

这是一个基本C++计算器的“我”版本,它需要一个单行输入(如1+1)来计算结果。我学这门语言已经两个月了。我没有假装发明了这段代码,但是我没有花时间去搜索这个变化。

这些职能包括:

  • 添加:1 + 1 = 2输入程序:1+1
  • 减法:程序中的1 - 1 = 0输入:1-1
  • 乘法:程序中的1 * 1 = 1输入:1*1
  • 除法:1 / 1 = 1程序输入:1/1
  • 指数:程序中的2 ^ 2 = 4输入:2^2
代码语言:javascript
复制
#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;
}
EN

回答 2

Code Review用户

发布于 2015-01-19 21:25:12

如果要执行除法,必须首先检查0作为给定的除数。为了防止这一点,最好是警告用户,并确保他们在继续之前输入一个有效的数字。

对于指数化,如果b为0,则可以立即返回1,从而获得“快捷方式”。没有必要尝试计算,因为任何提高到0的幂都是1。你也应该以某种方式处理负能量。如果用户输入b的这样一个值,代码就会中断。这个循环不能处理所有这些可能的值。

票数 10
EN

Code Review用户

发布于 2015-01-20 11:49:43

对于指数化,可以将b定义为double。在这种情况下,代码通常是不正确的,因为您使用一个简单的整数循环来执行幂运算。它只对非负整数指数有效。如果b是一个很大的数字,也可能需要很长的时间。使用

代码语言:javascript
复制
return pow(a,b);

允许任意的实数。该函数在<cmath>中。

如果你真的想实现正整数指数,你也没有使用最合理的解决方案。循环执行b乘法,如果通过平方进行幂运算,则可以将其减少为log2(b)乘法(基本上是b中的非零位数)。

http://en.wikipedia.org/wiki/Exponentiation_通过_平方

票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/78031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档