简单计算器

GitHub跳转原题关系图返回列表

按运算符分支计算,并优先处理除零和非法运算符。

OJ: noi_openjudge

题目 ID: ch0104-19

难度:入门

标签:模拟条件判断python

日期: 2026-07-30 23:01

题意

实现支持 +-*/ 的整数计算器;除零和非法运算符有指定提示。

思路

按运算符逐个分支。除法分支先检查零除数;商使用向零截断辅助函数,以匹配 C/C++ 整数除法而不是 Python 负数 // 规则。未知运算符走最后的错误分支。

代码

Python代码

python
def trunc_divide(dividend, divisor):
    quotient = abs(dividend) // abs(divisor)
    return quotient if dividend * divisor >= 0 else -quotient


left_text, right_text, operator = input().split()
left, right = int(left_text), int(right_text)

if operator == "+":
    print(left + right)
elif operator == "-":
    print(left - right)
elif operator == "*":
    print(left * right)
elif operator == "/":
    print("Divided by zero!" if right == 0 else trunc_divide(left, right))
else:
    print("Invalid operator!")

C++代码

cpp
#include <cstdio>

int main(){
    int a,b;
    char c;
    scanf("%d%d",&a,&b);
    scanf("%c",&c);
    scanf("%c",&c);
    int ans ;
    if( c == '*')
        ans = a*b;
    else if( c == '/' && b == 0){
        printf("Divided by zero!");
        return 0;
    }
    else if( c == '/')
        ans = a/b;
    else if (c == '+')
        ans = a + b;
    else if (c == '-')
        ans = a - b;
    else {
        printf("Invalid operator!");
        return 0;
    }
    printf("%d\n",ans);

    return 0;
}

复杂度

分支数固定,时间复杂度和额外空间复杂度均为 O(1)O(1)

总结

模拟题先列举输入状态,再把异常状态放进独立分支,能避免非法输入落入普通计算。