首页 > 试题广场 >

简单计算器

[编程题]简单计算器
  • 热度指数:44429 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
KiKi实现一个简单计算器,实现两个数的“加减乘除”运算,用户从键盘输入算式“操作数1运算符操作数2”,计算并输出表达式的值,如果输入的运算符号不包括在(+、-、*、/)范围内,输出“Invalid operation!”。当运算符为除法运算,即“/”时。如果操作数2等于0.0,则输出“Wrong!Division by zero!”

数据范围:字符串长度满足  ,保证运算符是一个char类型字符。

输入描述:
输入一行字符串,操作数1+运算符+操作数2 (其中合法的运算符包括:+、-、*、/)。


输出描述:
输出为一行。

如果操作数和运算符号均合法,则输出一个表达式,操作数1运算符操作数2=运算结果,各数小数点后均保留4位,数和符号之间没有空格。

如果输入的运算符号不包括在(+、-、*、/)范围内,输出“Invalid operation!”。当运算符为除法运算,即“/”时。

如果操作数2等于0.0,则输出“Wrong!Division by zero!”。
示例1

输入

1.0+3.0

输出

1.0000+3.0000=4.0000
示例2

输入

1.0;4.0

输出

Invalid operation!
示例3

输入

44.0/0.0

输出

Wrong!Division by zero!
计算器可以用一个switch循环来判断输入的运算符号,如果输入的符号不满足基本的四个运算符号,在最后就输出:“Invalid!operation”,在判断除号时,加上一个if条件判断你的被除数是不是等于0,然后根据题目要求再输出对应的信息
#include<bits/stdc++.h>
using namespace std;
int main(){
    double a, b;
    char c;
    while(cin >> a >> c >> b){
        switch(c){
            case '+':
                cout << fixed << setprecision(4) << a << c << fixed << setprecision(4) << b 
                     << '=' << fixed << setprecision(4) << (a + b) << endl;
                break;
            case '-':
                cout << fixed << setprecision(4) << a << c << fixed << setprecision(4) << b 
                     << '=' << fixed << setprecision(4) << (a - b) << endl;
                break;
            case '*':
                cout << fixed << setprecision(4) << a << c << fixed << setprecision(4) << b 
                     << '=' << fixed << setprecision(4) << (a * b) << endl;
                break;
            case '/':
                if(b == 0.0)
                    cout << "Wrong!Division by zero!" << endl;
                else
                    cout << fixed << setprecision(4) << a << c << fixed << setprecision(4) << b 
                     << '=' << fixed << setprecision(4) << (a / b) << endl;
                break;
            default:
                cout << "Invalid operation!" << endl;
                break;
        }
    }
    return 0;
}

发表于 2020-06-01 13:07:26 回复(0)
#include <iostream>
using namespace std;

int main()
{
    double a, b;
    char op;
    scanf("%lf%c%lf", &a, &op, &b);
    if (op == '+')
    {
        printf("%.4lf%c%.4lf=%.4lf", a, op, b, a + b);
    }
    else if (op == '-')
    {
        printf("%.4lf%c%.4lf=%.4lf", a, op, b, a - b);
    }
    else if (op == '*')
    {
        printf("%.4lf%c%.4lf=%.4lf", a, op, b, a * b);
    }
    else if (op == '/')
    {
        if(b) printf("%.4lf%c%.4lf=%.4lf", a, op, b, a / b);
        else cout << "Wrong!Division by zero!" << endl;
    }
    else cout << "Invalid operation!" << endl;
}

发表于 2022-02-26 14:15:22 回复(0)
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String exp = scanner.nextLine();
        String op = "+-*/";
        int i;
        char ch = '0';
        for (i = 0; i < exp.length(); i++) {
            ch = exp.charAt(i);
            if (ch != '.' && (ch < '0' || ch > '9')) {
                break;
            }
        }
        if (op.contains(ch + "")) {
            double num1 = Double.parseDouble(exp.substring(0, i));
            double num2 = Double.parseDouble(exp.substring(i + 1));
            double result;
            if (ch == '/' && num2 == 0.0) {
                System.out.println("Wrong!Division by zero!");
            } else {
                switch (ch) {
                    case '+':
                        result = num1 + num2;
                        break;
                    case '-':
                        result = num1 - num2;
                        break;
                    case '*':
                        result = num1 * num2;
                        break;
                    case '/':
                        result = num1 / num2;
                        break;
                    default:
                        result=0;
                }
                System.out.printf("%.4f%c%.4f=%.4f", num1, ch, num2,result);
            }
        } else {
            System.out.println("Invalid operation!");
        }

    }
}


发表于 2021-10-22 15:35:41 回复(0)
#include <stdio.h>
/*  float精度不够 要用double数据类型  */
int main()
{
	double a, c;
	char b;
	while(scanf("%lf%c%lf",&a,&b,&c)!=EOF)
	{
		if(b=='+') printf("%.4f+%.4f=%.4f\n",a,c,a+c);
		else if(b=='-') printf("%.4f-%.4f=%.4f\n",a,c,a-c);
		else if(b=='*') printf("%.4f*%.4f=%.4f\n",a,c,a*c*1.0);
		else if(b=='/')
		{
			if(c==0.0) printf("Wrong!Division by zero!\n");
			else  printf("%.4f/%.4f=%.4f\n",a,c,a/c);
		}
		else printf("Invalid operation!\n");
	}
	return 0;
}

发表于 2020-07-23 08:14:02 回复(0)
我这个思路比较适合初学者。
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
               int p=0;  
       while(sc.hasNext()){
           String c=sc.nextLine();
           for(int i=0;i<c.length();i++) {        
           if(c.charAt(i)=='+'){                      
               String[] n=c.split("\\+");
               double sum1=Double.parseDouble(n[0]);
               double sum2=Double.parseDouble(n[1]);
               System.out.println(String.format("%.4f",sum1)+"+"+String.format("%.4f",sum2)
                                  +"="+String.format("%.4f",(sum1+sum2)));
               p=p+1;#p值为真
           }
           else if(c.charAt(i)=='-'){
               String[] n=c.split("\\-");
              double sum1=Double.parseDouble(n[0]);
             double  sum2=Double.parseDouble(n[1]);
               System.out.println(String.format("%.4f",sum1)+"-"+String.format("%.4f",sum2)
                                  +"="+String.format("%.4f",(sum1-sum2)));
               p=p+1;
           }
                          else if(c.charAt(i)=='*'){
               String[] n=c.split("\\*");
              double sum1=Double.parseDouble(n[0]);
              double sum2=Double.parseDouble(n[1]);
               System.out.println(String.format("%.4f",sum1)+"*"+String.format("%.4f",sum2)
                                  +"="+String.format("%.4f",(sum1*sum2)));
               p=p+1;
                          }
                           else if(c.charAt(i)=='/'){
               String[] n=c.split("\\/");
              double sum1=Double.parseDouble(n[0]);
             double  sum2=Double.parseDouble(n[1]);
                               if(sum2!=0){
               System.out.println(String.format("%.4f",sum1)+"/"+String.format("%.4f",sum2)
                                  +"="+String.format("%.4f",(sum1/sum2)));
               p=p+1;
                               }
                               else{
                                   System.out.println("Wrong!Division by zero!");
                                   p=p+1;
                               }
                          }
           }
             if(p==0) {      
           System.out.println("Invalid operation!");}
          }
       }
   }


发表于 2020-04-16 20:58:18 回复(0)
#忘记使用except的功能输出 除零错误
while True:
    try:
       (3389)# In = []
        In  = input()
        if '+' in In:
            In = In.split('+')
            num1 = float(In[0])
            num2 = float(In[1])
            print("%.4f+%.4f=%.4f"%(num1,num2,num1+num2))
        elif '-' in In:
            In = In.split('-')
            num1 = float(In[0])
            num2 = float(In[1])
            print("%.4f-%.4f=%.4f"%(num1,num2,num1-num2))
        elif '*' in In:
            In = In.split('*')
            num1 = float(In[0])
            num2 = float(In[1])
            print("%.4f*%.4f=%.4f"%(num1,num2,num1*num2))
        elif '/' in In:
            In = In.split('/')
            num1 = float(In[0])
            num2 = float(In[1])
            if num2 == 0.0:
                print("Wrong!Division by zero!")
            else:
                print("%.4f/%.4f=%.4f"%(num1,num2,num1/num2))
        else:
            print("Invalid operation!")
    except:
        break

发表于 2020-03-23 15:47:21 回复(0)
#include <iostream>
#
include <stdio.h>
using namespace std;

int main()
{
    char c;
    double a, b;
    while (cin >> a >> c >> b)
    {
        if (c == '+')
        {
            double r = a + b;
            printf("%.4f+%.4f=%.4f\n", a, b, r);
        }
        else if (c == '-')
        {
            double r = a - b;
            printf("%.4f-%.4f=%.4f\n", a, b, r);
        }
        else if (c == '*')
        {
            double r = a * b;
            printf("%.4f*%.4f=%.4f\n", a, b, r);
        }
        else if (c == '/')
        {
            if (b == 0)
                cout << "Wrong!Division by zero!" << endl;
            else
            {
                double r = a / b;
                printf("%.4f/%.4f=%.4f\n", a, b, r);
            }
        }
        else
            cout << "Invalid operation!" << endl;
    }
    return 0;
}
发表于 2020-03-22 21:34:54 回复(0)
#include <stdio.h>
#include <math.h>

int main(void)
{
    char ch;
    double num1, num2, sum;
    
    while (scanf("%lf%c%lf", &num1, &ch, &num2) != EOF)
    {
        if (ch == '+')
        {
            sum = num1 + num2;
            printf("%.4lf+%.4lf=%.4lf\n", num1, num2, sum);
        }
        else if (ch == '-')
        {
            sum = num1 - num2;
            printf("%.4lf-%.4lf=%.4lf\n", num1, num2, sum);
        }
        else if (ch == '*')
        {
            sum = num1 * num2;
            printf("%.4lf*%.4lf=%.4lf", num1, num2, sum);
        }
        else if (ch == '/')
        {
            if (fabs(num2) <= 1e-6)
            {
                puts("Wrong!Division by zero!");
            }
            else
            {
                sum = num1 / num2;
                printf("%.4lf/%.4lf=%.4lf", num1, num2, sum);
            }
        }
        else
        {
            puts("Invalid operation!");
        }
    }
    
    return 0;
}
//浮点数不能直接与0相比较,考虑浮点数的存储方式;
编辑于 2020-05-07 17:10:38 回复(1)
import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            String s = sc.nextLine();
//正则切割
            String[] str = s.split("[+\\-*/]");
            if (str.length<2){
//题目已交代了格式是“操作数 运算符 操作数”,所以不需要判断奇葩的不合法情况,例如"1+2:333"”
                System.out.println("Invalid operation!");
            }else {
                double a = Double.parseDouble(str[0]);
                double b = Double.parseDouble(str[1]);
                String opt = s.substring(str[0].length(),str[0].length()+1);
                switch (opt){
                    case "+":
                        System.out.printf("%.4f"+opt+"%.4f=%.4f",a,b,a+b);;break;
                    case "-":
                        System.out.printf("%.4f"+opt+"%.4f=%.4f",a,b,a-b);;break;
                    case "*":
                        System.out.printf("%.4f"+opt+"%.4f=%.4f",a,b,a*b);;break;
                    default:
                        if (b==0){
                            System.out.printf("Wrong!Division by zero!");
                        }else {
                            System.out.printf("%.4f"+opt+"%.4f=%.4f",a,b,a/b);
                        };
                }
                System.out.println();
            }
        }
    }
}

编辑于 2020-04-19 00:30:12 回复(4)
#include <stdio.h>
int main()
{
    double a,b,res;
    char ch;
    while(scanf("%lf",&a)!=EOF){
        ch=getchar();
        scanf("%lf",&b);
        if(ch=='+'){
            res=a+b+0.0;
            printf("%.4f%c%.4f=%.4f\n",a,ch,b,res);
        }else if(ch=='-'){
            res=a-b-0.0;
            printf("%.4f%c%.4f=%.4f\n",a,ch,b,res);
        }else if(ch=='*'){
            res=a*b*1.0;
            printf("%.4f%c%.4f=%.4f\n",a,ch,b,res);
        }else if(ch=='/'){
            if(b==0){
                printf("Wrong!Division by zero!\n");
            }else{
                res=1.0*a/b;
                printf("%.4f%c%.4f=%.4f\n",a,ch,b,res);
            }
        }else{
            printf("Invalid operation!\n");
        }
    }
}

发表于 2020-04-10 23:40:40 回复(0)
while True:
    try:
        expr = input()
        for i in expr:
            if i.isnumeric() or i == '.':
                pass
            else:
                x, y = expr.split(i)
                res = eval(expr)
                print(f'{eval(x):.4f}{i}{eval(y):.4f}={res:.4f}') 
    except ZeroDivisionError as e:
        print("Wrong!Division by zero!")
    except SyntaxError as e:
        print("Invalid operation!")
    finally:
        break

通过Python3多个异常处理的方式解答。
编辑于 2021-07-20 13:48:16 回复(0)
可以用py自带的函数eval()进行计算,只需要排除除以0的场景即可
def calculator(x):
    for symb in x:
        if symb in ['+', '-', '*', '/']:
            a, b = map(float, x.split(symb))
            if symb == '/' and b == 0:
                print('Wrong!Division by zero!')
            else:
                print('%.4f%s%.4f=%.4f' % (a, symb, b, eval(x)))
            break
    else:
        print('Invalid operation!')

发表于 2021-03-30 15:48:28 回复(0)
#include <stdio.h>
int main(){
    double num1,num2,result;
    //double-float可能会发生精度丢失,这里的22.3在计算机内无法精确表示,
    //double比float尾数长,表示的更精确,转换为float,就会把多余的尾数舍入,
    //这也是为什么用float结果比double值偏小;但若22.3换成其他可用float精确表示的数
    //则不会有精度丢失
    int mark = 1;
    char operator;
    scanf("%lf%c%lf",&num1,&operator,&num2);
    if(operator == '+'){
        result = num1 + num2;
    } else if(operator == '-'){
        result = num1 - num2;
    } else if(operator == '*'){
        result = num1 * num2;
    } else if(operator == '/'){
        if(num2 != 0){
            result = num1 / num2;
        } else {
            printf("Wrong!Division by zero!");
            mark = 0;
        }
    } else {
        printf("Invalid operation!");
        mark = 0;
    }
    if(mark){
        printf("%.4f%c%.4f=%.4f",num1,operator,num2,result);
    }
    return 0;
}

发表于 2022-08-14 20:12:13 回复(0)
#include<stdio.h>
int main(){
    char oper;
    double num1,num2,result;
    scanf("%lf%c%lf",&num1,&oper,&num2);
    if( (oper != '+') && (oper != '-') && (oper != '*') && (oper != '/') ) printf("Invalid operation!");
    else if(oper == '/' && num2 == 0) printf("Wrong!Division by zero!");
    else{
        if(oper == '+') result=num1+num2;
        if(oper == '-') result=num1-num2;
        if(oper == '*') result=num1*num2;
        if(oper == '/') result=num1/num2;
        printf("%.4lf%c%.4f=%.4lf",num1,oper,num2,result);
    }
    return 0;
}

发表于 2022-06-14 15:33:37 回复(0)
#include <stdio.h>

int main(){
    double n1, n2 = 0;
    char a = 0;
    scanf("%lf%c%lf", &n1, &a, &n2);
    switch(a){
        case '+':
            printf("%.4lf+%.4f=%.4lf", n1, n2, n1 + n2);
            break;
        case '-':
            printf("%.4lf-%.4f=%.4lf", n1, n2, n1 - n2);
            break;
        case '*':
            printf("%.4lf*%.4lf=%.4lf", n1, n2, n1 * n2);
            break;
        case '/':
            if(n2 == 0)
                printf("Wrong!Division by zero!");
            else
                printf("%.4lf/%.4lf=%.4lf", n1, n2, n1 / n2);
            break; 
        default:
            printf("Invalid operation!");
            break;
    }
    return 0;
}

发表于 2022-05-23 20:48:20 回复(0)

发表于 2022-04-18 15:44:18 回复(0)
while True:
    try:
        lt = input()
        for b in lt:
            if b in ['+','-','*','/']:
                a,c = map(float,lt.split(b))
                if c==0.0 and b in '/':
                    print('Wrong!Division by zero!')
                    break
                else:
                    d = eval(lt)
                    print('{:.4f}{}{:.4f}={:.4f}'.format(a,b,c,d))
                    break
        else:
            print('Invalid operation!')
    except:
        break

发表于 2021-03-28 15:28:17 回复(0)
为什么我写的会在执行“92.0*22.3”这组参数的时候输出的是2051.5999????
#include <stdio.h>

int main() {
    float a, b;char c;
    scanf("%f%c%f",&a,&c,&b);
    if (c=='/') {
        if (b==0.0) {
            printf("Wrong!Division by zero!");
        }
        else {
            printf("%.4f/%.4f=%.4f",a,b,a/b);
        }
    }
    else {
        if (c=='+') {
            printf("%.4f+%.4f=%.4f",a,b,a+b);
           
        }
        else {
            if (c=='-') {
                printf("%.4f-%.4f=%.4f",a,b,a-b);

            }
            else {
                if (c=='*') {
                    printf("%.4f*%.4f=%.4f",a,b,a*b);
                   
                }
                else {
                    printf("Invalid operation!");
                }
            }
        }
    }
    return 0;
}

发表于 2024-09-09 17:27:22 回复(2)
#include <stdio.h>

int main() 
{
    double operand1 =0,operand2= 0; //操作数--operand
    char operator = '0';    //运算符--operator
    scanf("%lf%c%lf",&operand1, &operator, &operand2);
    if(operator =='+' || operator == '-' || operator == '*' || operator == '/') //合法操作符
    {
        if(operator == '+')     //操作符为字符‘+’
            printf("%.4lf+%.4lf=%.4lf\n",operand1,operand2,operand1+operand2);
        if(operator == '-')
            printf("%.4lf-%.4lf=%.4lf\n",operand1,operand2,operand1-operand2);
        if(operator == '*')
            printf("%.4lf*%.4lf=%.4lf\n",operand1,operand2,operand1*operand2);

        if(operator == '/')  //操作数2不为0
        {
            if(operand2 == 0)
                printf("Wrong!Division by zero!\n");
            else
                printf("%.4lf/%.4lf=%.4lf\n",operand1,operand2,operand1/operand2);
        }
    }
    else 
    {
        printf("Invalid operation!\n");
    }
    return 0;
}


编辑于 2024-04-19 22:30:44 回复(0)
#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

int Validity(char c, int factor)
{
    //判断符号
    if (c != '+' && c != '-' && c != '*' && c != '/')
    {
        printf("Invalid operation!\n");
        return 1;
    }
    //判断除数
    if (factor == 0)
    {
        printf("Wrong!Division by zero!\n");
        return 1;
    }
    //合法
    return 0;
}

double Add(double a, double b)
{
    return a + b;
}

double Sub(double a, double b)
{
    return a - b;
}

double Div(double a, double b)
{
    return a / b;
}

double Mul(double a, double b)
{
    return a * b;
}

int main()
{
    double a = 0.0;
    double b = 0.0;
    double result = 0.0;
    char operator = 0;

    scanf("%lf%c%lf", &a, &operator, &b);

    //合法性判断
    if (Validity(operator, b))
    {
        return 0;
    }

    switch (operator)
    {
    case '+':
        result = Add(a, b);
        break;
    case '-':
        result = Sub(a, b);
        break;
    case '*':
        result = Mul(a, b);
        break;
    case '/':
        result = Div(a, b);
        break;
    //其实这里不需要default,因为前面已经进行过合法性判断
    //但是为了养成良好习惯,还是加上了
    default:
        break;
    }

    printf("%.4lf%c%.4lf=%.4lf\n", a, operator, b, result);

    return 0;
}

发表于 2024-03-19 10:45:57 回复(0)