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.0+3.0
1.0000+3.0000=4.0000
1.0;4.0
Invalid operation!
44.0/0.0
Wrong!Division by zero!
#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;
} #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;
} 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!");
}
}
}
我这个思路比较适合初学者。
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!");}
}
}
}
#忘记使用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 #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相比较,考虑浮点数的存储方式;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();
}
}
}
} #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");
}
}
} 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 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!') #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;
} #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;
} #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;
} 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 #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;
} #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;
}