首页 > 试题广场 >

加减乘除

[编程题]加减乘除
  • 热度指数:7213 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
根据输入的运算符对输入的整数进行简单的整数运算。 运算符只会是加+、减-、乘*、除/、求余%、阶乘!六个运算符之一。 输出运算的结果,如果出现除数为零,则输出“error”,如果求余运算的第二个运算数为0,也输出“error”。

输入描述:
输入为一行。先输入第一个整数,空格输入运算符,然后再空格输入第二个整数,回车结束本次输入。
如果运算符为阶乘!符号,则不输入第二个整数,直接回车结束本次输入。


输出描述:
可能有多组测试数据,对于每组数据,
输出一行。输出对输入的两个(或一个)数,根据输入的运算符计算的结果,或者“error”。
示例1

输入

12 + 34
54 - 25
3 * 6
45 / 0
5 !
34 % 0

输出

46
29
18
error
120
error
这题也是很简单的了hhh,可能让我们做就是改善一下被虐的心情(#^.^#)
 #include<iostream>
using namespace std;
int main(){
    int a,b;
    char ch;
    while(cin>>a>>ch){
        switch(ch){
            case '+':
                cin>>b;
                cout<<a+b<<endl;
                break;
            case '-':
                cin>>b;
                cout<<a-b<<endl;
                break;
            case '*':
                cin>>b;
                cout<<a*b<<endl;
                break;
            case '/':
                cin>>b;
                if(b==0) cout<<"error"<<endl;
                else cout<<a/b<<endl;
                break;
            case '%':
                cin>>b;
                if(b==0) cout<<"error"<<endl;
                else cout<<a%b<<endl;
                break;
            case '!':
                int temp=1;
                for(int i=1;i<=a;i++)
                    temp*=i;
                cout<<temp<<endl;
                break;
        }
    }
}

发表于 2019-02-09 20:02:21 回复(1)

python solution, 通过测试

from math import factorial as f
while True:
    try:
        a=input()
        if a.endswith("!"):
            print(f(int(a.rstrip("!"))))
        elif "/" in a:
            num1,num2=map(int,a.split("/"))
            print(num1//num2 if num2!=0 else "error")
        else:
            try:
                print(eval(a))
            except:
                print("error")
    except:
        break
发表于 2017-10-16 17:19:07 回复(0)
#include<iostream>
using namespace std;

int fac(int a)
{
    int res = 1;
    for(int i=1;i<=a;i++)
        res *=i;
    return res;
}

int main()
{
    char op;
    int a,b;
    while(cin>>a>>op)
    {
    	if(op!='!') cin>>b;
        if(op=='/'&&b==0){
            cout<<"error"<<endl;
            continue;
        }
        if(op=='%'&&b==0){
            cout<<"error"<<endl;
            continue;
        }
        int ans = 0;
        switch(op){
            case '+':ans = a+b;break;
            case '-':ans = a-b;break;
            case '*':ans = a*b;break;
            case '/':ans = a/b;break;
            case '%':ans = a%b;break;
            case '!':ans = fac(a);break;
        }
        cout<<ans<<endl;
    }
    return 0;
}

发表于 2020-04-16 11:22:42 回复(0)
#include<stdio.h>
int main()
{
    int a,b;char c;
    while(scanf("%d %c",&a,&c)!=EOF)//中间要有空格
    {
        if(c!='!')
        {
            scanf("%d",&b);
            switch(c)
            {
                case '+':printf("%d\n",a+b);break;
                case '-':printf("%d\n",a-b);break;
                case '*':printf("%d\n",a*b);break;
                case '/':if(b!=0)
                        printf("%d",a/b);
                        else
                            printf("error\n");
                        break;
                case '%':if(b!=0)
                        printf("%d\n",a%b);
                        else
                            printf("error\n");
                        break;
            }
        }
        else{
            int s=1;
            for(int i=1;i<=a;i++)
                s*=i;
            printf("%d\n",s);
        }
    }
}

发表于 2020-04-06 15:57:50 回复(0)
Java 解法
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()){
            int i = scanner.nextInt();
            String s = scanner.next();
            int j=0;
            if (!s.equals("!")){
                j = scanner.nextInt();
            }
            switch (s){
                case "+":
                    System.out.println(i+j);break;
                case "-":
                    System.out.println(i-j);break;
                case "*":
                    System.out.println(i*j);break;
                case "/":
                    if (j==0)
                        System.out.println("error");
                    else
                        System.out.println(i/j);
                    break;
                case "!":
                    System.out.println(fun(i));break;
                case "%":
                    if (j==0)
                        System.out.println("error");
                    else
                        System.out.println(i%j);
                    break;
            }
        }
    }
    static  int fun(int n){
        int res=1;
        for (int i = 2; i <=n ; i++) {
            res=res*i;
        }
        return res;
    }
}


发表于 2020-03-13 11:25:37 回复(0)
#include <iostream>
#include <cstdio>
using namespace std;

int F(int n){
    int res=1;
    for(int i=2;i<=n;i++){
        res*=i;
    }
    return res;
}

void calc(int a,char c,int b){
    switch(c){
        case '+':{
            cout << a+b << endl;
            break;
        }
        case '-':{
            cout << a-b << endl;
            break;
        }
        case '*':{
            cout << a*b << endl;
            break;
        }
        case '/':{
            cout << a/b << endl;
            break;
        }
        case '%':{
            cout << a%b << endl;
            break;
        }
        case '!':{
            cout << F(a) << endl;
            break;
        }
    }
}

int main(){
    int a,b;
    char c;
    while(cin >> a){
        getchar();///接收空格
        c=getchar();
        getchar();
        if(c!='!'){
            cin >> b;
            if(b==0){
                cout << "error" << endl;
            }else{
                calc(a,c,b);
            }
        }else{
            calc(a,c,0);
        }
    }
    return 0;
}


安慰题
发表于 2019-03-14 22:05:04 回复(0)

坑的是除法为整除

while True:
    try:
        string = input()
        if string.find('+') >= 0:
            temp = string.split('+')
            print(int(temp[0])+int(temp[1]))
        elif string.find('-') >= 0:
            temp = string.split('-')
            print(int(temp[0])-int(temp[1]))
        elif string.find('*') >= 0:
            temp = string.split('*')
            print(int(temp[0])*int(temp[1]))
        elif string.find('/') >= 0:
            temp = string.split('/')
            if int(temp[1]) == 0:
                print('error')
            else:
                print(int(temp[0])//int(temp[1]))
        elif string.find('%') >= 0:
            temp = string.split('%')
            if int(temp[1]) == 0:
                print('error')
            else:
                print(int(temp[0])%int(temp[1]))
        elif string.find('!') >= 0:
            temp = string.split('!')
            result = 1
            for i in range(1,int(temp[0])+1):
                result *= i
            print(result)
    except Exception:
        break
编辑于 2018-09-28 17:15:05 回复(0)
#include<iostream>
#include<cstdio>
using namespace std;

int main()
{
    int a,b;
    char ch;

    while(cin >> a)
    {
        cin >> ch;
        switch(ch)
        {
            case '+':
                cin >> b;
                cout << a+b << endl;
                break;
            case '-':
                cin >> b;
                cout << a-b << endl;
                break;
            case '*':
                cin >> b;
                cout << a*b << endl;
                break;
            case '/':
                cin >> b;
                if(b == 0)
                {
                    cout << "error" << endl;
                }
                else
                {
                    cout << a/b << endl;
                }
                break;
            case '%':
                cin >> b;
                if(b == 0)
                {
                    cout << "error" << endl;
                }
                else
                {
                    cout << a%b << endl;
                }
                break;
            case '!':
                int sum = 1;
                for(int i = 1; i <= a; ++i)
                {
                    sum *= i;
                }
                cout << sum << endl;
                break;
        }
    }

    return 0;
}


发表于 2016-08-13 10:45:20 回复(0)
#include<bits/stdc++.h>
int main(){
    int a,b;
    char c;
    while(scanf("%d %c",&a,&c)!=EOF)
        if(c!='!'){
            scanf("%d",&b);
            switch(c){
                case '+':printf("%d\n",a+b);
                    break;
                case '-':printf("%d\n",a-b);
                    break;
                case '*':printf("%d\n",a*b);
                    break;
                case '/':if(b!=0)
                             printf("%d\n",a/b);
                         else
                             printf("error\n");
                    break;
                case '%':if(b!=0)
                             printf("%d\n",a%b);
                         else
                             printf("error\n");
                    break;
            }
        }
        else{
            int s=1;
            for(int i=2;i<=a;i++)
                s=s*i;
            printf("%d\n",s);
        }
}
编辑于 2019-03-12 23:49:53 回复(0)
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int jiecheng(int n){
    int res = 1;
    for(int i=1;i<=n;i++){
          res = res * i;
    }
    return res;
}
int main(){
     string express;
     while(1){
        getline(cin,express);
        if(express=="") break;
        if(express[express.size()-1]=='!'){
             string num = express.substr(0,express.find(' '));
             int res = jiecheng(stoi(num));
             printf("%d\n",res);
        }else{
             string num1 = express.substr(0,express.find(' '));
             express.erase(0,express.find(' ')+1);
             string num2 = 
             express.substr(express.find(' ')+1,express.size()-express.find(' '));
             if(express[0]=='+'){
                printf("%d\n",stoi(num1)+stoi(num2));
             }else if(express[0]=='-'){
                printf("%d\n",stoi(num1)-stoi(num2));
             }else if(express[0]=='/'){
                if(stoi(num2)!=0)
                printf("%d\n",stoi(num1)/stoi(num2));
                else printf("error\n");
             }else if(express[0]=='*'){
                printf("%d\n",stoi(num1)*stoi(num2));
             }else if(express[0]=='%'){
                if(stoi(num2)!=0)
                printf("%d\n",stoi(num1)%stoi(num2));
                 else printf("error\n");
             }
             
        }
     }
}

编辑于 2024-03-21 20:04:10 回复(0)
#include<iostream>
#include<string>
using namespace std;
int fbi(int n) {
    int a[100];
    int num = 1;
    a[0] = 1;
    a[1] = 1;
    if (n == 0 || n == 1) {
        return num;
    } else {
        num = n * fbi(n - 1);
        return num;
    }
}
int main() {
    int a, b;
    float num;
    int k;
    string str;
    while (cin >> a >> str ) {
        if (str == "!") {
            k = fbi(a);
            cout << k << endl;
        } else {
            cin >> b;
        }
        if (str == "+") {
            num = a + b;
            cout << num << endl;
        } else if (str == "-") {
            num = a - b;
            cout << num << endl;
        } else if (str == "*") {
            num = a * b;
            cout << num << endl;
        } else if (str == "/") {
            if (b == 0) {
                cout << "error" << endl;
            } else {
                num = a / b;
                cout << num << endl;
            }
        } else if (str == "%") {
            if (b == 0) {
                cout << "error" << endl;
            } else {
                num = a % b;
                cout << num << endl;
            }
        }

    }
    system("pause");
    return 0;
}
编辑于 2024-03-09 19:39:14 回复(0)
#include <iostream>
#include <string>
using namespace std;
int factorial(int n){
    if(n==1) return 1;
    if(n==0) return 1;
    return factorial(n-1)*n;
}
int main(){
    string str;
    char buf[100];
    while(fgets(buf,100,stdin) != NULL){
        str = buf;
        str.pop_back();
        string lhs, rhs;
        bool flag = false;
        char a;
        for(int i=0; i<str.size(); ++i){
            if(str[i]>='0' && str[i] <= '9' && !flag){
                lhs.push_back(str[i]);
            }else{
                flag=true;
            }
            if(str[i]<'0'&&str[i]!=' ' || str[i]>'9' && str[i] != ' '){
                a=str[i];
            }
            if(str[i]>='0' && str[i] <= '9' && flag){
                rhs.push_back(str[i]);
            }
        }
        switch (a) {
            case '+': cout << stoi(lhs) +stoi(rhs) << endl;
                break;
            case '-': cout << stoi(lhs) - stoi(rhs) << endl;
                break;
            case '*': cout << stoi(lhs) * stoi(rhs) << endl;
                break;
            case '/': if(stoi(rhs)!=0){
                cout << stoi(lhs) / stoi(rhs) << endl;
            }else{
                cout << "error" << endl;
            }
                break;
            case '!': cout << factorial(stoi(lhs)) << endl;
                break;
            case '%':
                if (stoi(rhs)!=0){
                    cout << stoi(lhs) % stoi(rhs) << endl;
                }else{
                    cout << "error" << endl;
                }
                break;
            default: break;
        }
    }
}

编辑于 2024-03-03 22:23:27 回复(0)
#include <iostream>
#include <string>
using namespace std;

int factorial(int n) {  //求阶乘
    return n <= 1 ? 1 : n * factorial(n - 1);
}

int main() {
    int num1, num2;
    string oprt;
    while (cin >> num1 >> oprt) {
        if (oprt == "!") {
            cout << factorial(num1) << endl;
            continue;
        }
        cin >> num2;
        if (num2 == 0 && (oprt == "/" || oprt == "%")) {
            cout << "error" << endl;
            continue;
        }
        switch (oprt[0]) {
            case '+':
                cout << num1 + num2 << endl;
                break;
            case '-':
                cout << num1 - num2 << endl;
                break;
            case '*':
                cout << num1* num2 << endl;
                break;
            case '/':
                cout << num1 / num2 << endl;
                break;
            default:    //'%'
                cout << num1 % num2 << endl;
        }
    }
    return 0;
}

编辑于 2024-03-01 13:04:19 回复(0)
//也不是简易计算器,输入很少,整体还是很简单的。
#include "stdio.h"

int recursion(int num){//求阶乘的递归
    if(num == 1)
        return 1;
    else
        return recursion(num-1)*num;
}

int main(){
    int num1,num2;
    char op;
    while (scanf("%d ",&num1)!=EOF){
        scanf("%c",&op);
        switch (op) {
            case '+':
                scanf("%d",&num2);
                printf("%d\n",num1+num2);
                break;
            case '-':
                scanf("%d",&num2);
                printf("%d\n",num1-num2);
                break;
            case '*':
                scanf("%d",&num2);
                printf("%d\n",num1*num2);
                break;
            case '/':
                scanf("%d",&num2);
                if(num2 == 0){
                    printf("error\n");
                    break;
                }
                printf("%d\n",num1/num2);
                break;
            case '%':
                scanf("%d",&num2);
                if(num2 == 0){
                    printf("error\n");
                    break;
                }
                printf("%d\n",num1%num2);
                break;
            case '!':
                printf("%d\n", recursion(num1));
        }
    }
}

发表于 2023-03-13 09:58:03 回复(0)
当分支较多时,用switch case 代替 if else,前者不需要遍历,直接找到对应case,提高效率
#include <cstdio>

long long int Factorial(int n){
    if(n == 0){
        return 1;
    }else{
        return n*Factorial(n-1);
    }
}

int main(){
    int a,c;
    char b;
    while(scanf("%d %c",&a,&b) != EOF){
        if(b == '!'){
            printf("%lld\n",Factorial(a));
        }else{
            scanf("%d",&c);
            switch(b){
                case '+':
                    printf("%d\n",a+c);
                    break;
                case '-':
                    printf("%d\n",a-c);
                    break;
                case '*':
                    printf("%d\n",a*c);
                    break;
                case '/':
                    if(c == 0){
                        printf("error\n");
                    }else{
                        printf("%d\n",a/c);
                    }
                    break;
                case '%':
                    if(c == 0){
                        printf("error\n");
                    }else{
                        printf("%d\n",a%c);
                    }
                    break;
            }
        }
    }
    return 0;
}


发表于 2023-03-11 14:24:41 回复(0)
#include <iostream>
#include <cstdio>
#include <string>
#include <cctype>

using namespace std;

int op(int a, int b, char n) {
	if (n == '+') {
		return a + b;
	}
	else if (n == '-') {
		return a - b;
	}
	else if (n == '*') {
		return a * b;
	}
	else if (n == '/') {
		if (b == 0) {
			return -99;
		}
		return a / b;
	}
	else if (n == '%') {
		if (b == 0) {
			return -99;
		}
			return a % b;
	}
	else {
		for(int i = a - 1; i > 0; i--) {
			a *= i;
			}
			return a;
	}
}

int main() {
	string str;	
	while (getline(cin, str)) {
		if (str == "0") {
			break;
		}
		int index = 0;
		int a = 0;
		int b = 0;
		char oper = '0';
		while (isdigit(str[index])) {
			a = a * 10 + (str[index] - '0');
			index++;
		}
		index++;
		oper = str[index];
		index += 2;
		if (oper == '!') {
			printf("%d\n", op(a, 0, oper));
			continue;
		}
		while (isdigit(str[index]) && index < str.size()) {
			b = b * 10 + (str[index] - '0');
			index++;
		}
		int result = op(a, b, oper);
		if (result == -99) {
			printf("error\n");
		}
		else {
			printf("%d\n", result);
		}
	}
	return 0;
}

发表于 2022-03-15 21:29:30 回复(0)
#include<cstdio>
#include<iostream>

using namespace std;

int Factorial(int n){
    if(n == 1) return n;
    else return n*Factorial(n-1);
}

void cal(int a, char op, int b){
    if(op == '+') cout << a+b << endl;
    else if(op == '-') cout << a-b << endl;
    else if(op == '*') cout << a*b << endl;
    else if(op == '!') cout << Factorial(a) << endl;
    else if(op == '/'){
        if(b == 0) cout << "error" << endl;
        else cout << a/b << endl;
    }
    else if(op == '%'){
        if(b == 0) cout << "error" << endl;
        else cout << a%b << endl;
    }
}

int main(){
    int a, b;
    char op;
    while(cin >> a >> op){
        if(op != '!') cin >> b;
        else b = 0;
        cal(a, op, b);
    }
}

发表于 2022-03-14 10:36:17 回复(0)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <malloc.h>

int main()
{
    int n,m;
    char op;
    while(scanf("%d",&n)!=EOF)
    {
        getchar();
        scanf("%c",&op);
        if(op!='!')
        {
            getchar();
            scanf("%d",&m);
            if(op=='/'&&m==0||op=='%'&&m==0)
            {
                printf("error\n");
                continue;
            }
            int res;
            //printf("%d %c %d\n",n,op,m);
            switch(op)
            {
                case '+':res=n+m;break;
                case '-':res=n-m;break;
                case '*':res=n*m;break;
                case '/':res=n/m;break;
                case '%':res=n%m;break;
                default:break;
            }
            printf("%d\n",res);
        }else
        {
            getchar();
            int res=1;
            for(int i=1;i<=n;i++)
            {
                res=res*i;
            }
            printf("%d\n",res);
        }
    }
}
发表于 2022-02-27 11:21:29 回复(0)
#include<stdio.h>
int main()
{
	int a;
    while (scanf("%d",&a)!=EOF)
    {
    	getchar();//吸收空格 
    	int i,b,t=0,c=1;
	    char op;
    	scanf("%c",&op);
    	if(op=='!')//阶乘运算
    	{
    		for(i=1;i<=a;i++)
    		{
    			c*=i;
			}
		}
		else scanf("%d",&b);
		//判断OP符号
		switch(op)
		{
			case '+': { c=a+b; break; }
			case '-': { c=a-b; break; }
			case '*': { c=a*b; break; }
			case '/':
				{
					if(b==0) t=-1;
					else c=a/b;
					break;
				}
			case '%':
				{
					if(b==0) t=-1;
					else c=a%b;
					break;
				}
		}
		//输出
		if(t==-1) printf("error\n");
		else printf("%d\n",c); 
	}
    return 0;
}

发表于 2021-05-29 11:19:30 回复(0)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s;
        while ((s = br.readLine()) != null) {
            String[] str = s.split(" ");
            if (str.length == 3) {
                int a = Integer.parseInt(str[0]);
                int b = Integer.parseInt(str[2]);
                if (str[1].equals("+")) {
                    System.out.println(a + b);
                } else if (str[1].equals("-")) {
                    System.out.println(a - b);
                } else if (str[1].equals("*")) {
                    System.out.println(a * b);
                } else if (str[1].equals("/")) {
                    if (str[2].equals("0"))
                        System.out.println("error");
                    else
                        System.out.println(a / b);
                } else if (str[1].equals("%")) {
                    if (str[2].equals("0"))
                        System.out.println("error");
                    else
                        System.out.println(a % b);
                }
            } else if (str.length == 2 && str[1].equals("!")) {
                int x = Integer.parseInt(str[0]);
                int result = 1;
                for (int i = 1; i <= x; i++) {
                    result = result * i;
                }
                System.out.println(result);
            }


        }
    }


}


发表于 2021-02-23 17:33:15 回复(0)

问题信息

难度:
52条回答 5876浏览

热门推荐

通过挑战的用户

查看代码